WPF 3D Wissenschaftliche Diagramme:

Oberflächen-, Kontur- und Heatmap-Vergleich

3D surface chart
contour plot
scientific chart
3D waterfall
GPU 3D chart
4D visualization
contour heatmap
Delaunay triangulation

3D Wissenschaftliche Diagramme:
GPU-Oberflächen-, Kontur-, Heatmap- und Wasserfall-Rendering aus einem gemeinsamen Datenzeiger

Wissenschaftliche Visualisierung erfordert häufig zwei Ansichten derselben Daten: eine 3D-Oberfläche, die die Topografie zeigt, und eine 2D-Kontur-Heatmap, die die genaue Werteverteilung zeigt. Die meisten Charting-Bibliotheken behandeln diese als völlig separate Diagrammtypen mit separaten Datenspeichern, separaten Rendering-Pipelines und separaten Speicherallokationen. ProEssentials macht etwas grundlegend anderes — es rendert beide Ansichten aus derselben GPU-Compute-Shader-Pipeline, liest denselben Datenzeiger und verwendet null zusätzlichen Speicher.

Diese Seite vergleicht 3D- und 2D-wissenschaftliche Charting-Fähigkeiten über alle fünf WPF-Bibliotheken hinweg, führt durch echten Produktionscode einer Materialoberflächen-Scan-Anwendung, der die Shared-Memory-Architektur demonstriert, und beschreibt die Diagrammtypen, die nur ProEssentials bietet — einschließlich 4D-Color-by-Value-Oberflächen, eingebauter Delaunay-Triangulation aus Punktwolken und benutzerdefinierter Polygondaten für beliebige 3D-Geometrie.

3D- und 2D-Wissenschaftliche Diagrammtyp-Matrix

Die folgende Tabelle vergleicht jeden wissenschaftlichen Diagrammtyp über alle fünf WPF-Bibliotheken. SciChart und LightningChart bieten starke 3D-Abdeckung mit jeweils 12 von 13 Typen, aber keiner bietet Delaunay-Triangulation aus Punktwolken. Syncfusion deckt 7 Typen über seine SfSurfaceChart- und SfChart3D-Steuerelemente ab. DevExpress deckt 5 über sein Chart3DControl ab. ProEssentials ist die einzige Bibliothek, die alle dreizehn unten aufgeführten Diagrammtypen abdeckt — und die einzige mit GPU-Compute-Shader-Rendering über Oberflächen, Konturen, Heatmaps und Echtzeit-3D.

Chart TypeProEssentialsSciChartLightningChartSyncfusionDevExpress
3-D Surface (shaded)✅ GPU compute shader
3-D Wireframe✅ GPU compute shader
3-D Surface + Contour overlay✅ GPU compute shader
3-D Scatter
3-D Bar
3-D Waterfall
2-D Contour / Heatmap (GPU)✅ GPU compute shader✅ Heatmap
2-D Contour Lines
4-D (XYZ + W-data / color)✅ GPU compute shader
Delaunay triangulation✅ Built-in from point cloud
Custom polygon data (3-D geometry)✅ Raw vertices + color
Real-time 3-D✅ GPU compute shader
3-D annotations (XYZ positioned)✅ Text, symbol, polygon

ProEssentials unterstützt alle 13 wissenschaftlichen Diagrammtypen in diesem Vergleich. SciChart und LightningChart decken jeweils 12 ab, Syncfusion deckt 7 ab und DevExpress 5. Obwohl alle fünf Bibliotheken 3D-Oberflächen-Charting bieten, bietet nur ProEssentials integrierte Delaunay-Triangulation aus Punktwolken, und nur ProEssentials rendert Oberflächen, Konturen, Heatmaps und Echtzeit-3D durch eine einheitliche GPU-Compute-Shader-Pipeline mit Zero-Copy-Shared-Memory.

Praxiscode: Materialoberflächen-Scan-Anwendung

Die folgenden Code-Auszüge stammen aus der GigaPrime3D-Materialoberflächen-Scan-Demo — einer produktionsfähigen WPF-Anwendung, die hochauflösende Oberflächen-Scan-Daten (bis zu 6000 × 6000 Gitter, 36 Millionen Datenpunkte) gleichzeitig als 3D-schattierte Oberfläche und 2D-Kontur-Heatmap rendert. Dies ist kein vereinfachtes Tutorial-Beispiel. Dies ist das Code-Muster, das in industrieller Metrologie, Halbleiter-Wafer-Inspektion und Geländeanalyse-Anwendungen verwendet wird. Die drei Auszüge demonstrieren die gemeinsame Speicherdeklaration, das duale Zero-Copy-Datenladen mit GPU-Compute-Shaders und die verknüpfte Zoom-Synchronisation zwischen 2D- und 3D-Ansichten.

Schritt 1: Gemeinsamer statischer Speicher — Ein Array, zwei Diagramme

Die Anwendung allokiert ein einzelnes statisches float-Array (sMyYData), das groß genug für 36 Millionen Höhenwerte ist — die Y-Daten (Höhe) für den Oberflächen-Scan. Die X- und Z-Arrays halten die Gitterkoordinaten für Spalten bzw. Zeilen. Diese drei Arrays sind der einzige Datenspeicher in der gesamten Anwendung. Kein Diagrammsteuerelement wird jemals eine eigene Kopie allokieren.

// 36M points × 4 bytes = ~150 MB
// Passing shared app memory to both Pe3do and Pesgo saves ~150 MB
// Always best to save memory where we can
private static float[] sMyXData = new float[6000];       // cols max
private static float[] sMyZData = new float[6000];       // rows max
private static float[] sMyYData = new float[36000000];   // rows × cols max

// Pin smaller arrays (< 85 KB) so GC won't relocate them
private GCHandle _pinXHandle;
private GCHandle _pinZHandle;

public MainWindow()
{
    _pinXHandle = GCHandle.Alloc(sMyXData, GCHandleType.Pinned);
    _pinZHandle = GCHandle.Alloc(sMyZData, GCHandleType.Pinned);
    // ...
}

Die kleineren X- und Z-Arrays (ohnehin nie vom GC verschoben — kein Pinning nötig. Dies ist ein Detail, das in echtem Produktionscode wichtig ist: das Verständnis der .NET-Speicherverwaltung auf dem Niveau, das für Zero-Copy-Charting erforderlich ist.

Schritt 2: GPU Compute Shader + Zero-Copy für beide Ansichten

Wenn der Benutzer eine neue Oberflächen-Scan-Datei lädt, füllt die RefreshUi-Methode die gemeinsamen Arrays und übergibt dann denselben Zeiger an beide Diagrammsteuerelemente. Die entscheidenden Zeilen sind UseDataAtLocation() — das einen Zeiger speichert statt zu kopieren — und ComputeShader = true — das die GPU-seitige Szenenkonstruktion aktiviert. Beachten Sie, dass das Pesgo-2D-Konturdiagramm dieselbe ComputeShader-Eigenschaft und dasselbe UseDataAtLocation-Aufrufmuster wie die Pe3do-3D-Oberfläche verwendet:

// ─── 3-D Surface (Pe3do) ─── GPU compute shader + zero-copy ───
Chart3DSurface.PeData.Subsets = _rows;
Chart3DSurface.PeData.Points  = _cols;
Chart3DSurface.PeData.DuplicateDataX = DuplicateData.PointIncrement;
Chart3DSurface.PeData.DuplicateDataZ = DuplicateData.SubsetIncrement;
Chart3DSurface.PeData.ComputeShader  = true;  // GPU-side scene construction

// No data transfer — chart reads your array via pointer
Chart3DSurface.PeData.X.UseDataAtLocation(sMyXData, _cols);
Chart3DSurface.PeData.Y.UseDataAtLocation(sMyYData, size);
Chart3DSurface.PeData.Z.UseDataAtLocation(sMyZData, _rows);

// ─── 2-D Contour (Pesgo) ─── same GPU pipeline, same pointer ───
Chart2DContour.PeData.Subsets = _rows;
Chart2DContour.PeData.Points  = _cols;
Chart2DContour.PeData.DuplicateDataX = DuplicateData.PointIncrement;
Chart2DContour.PeData.DuplicateDataY = DuplicateData.SubsetIncrement;
Chart2DContour.PeData.ComputeShader  = true;  // same GPU path as 3-D

// Same shared memory — no copy, no duplication
Chart2DContour.PeData.X.UseDataAtLocation(sMyXData, _cols);
Chart2DContour.PeData.Z.UseDataAtLocation(sMyYData, size);
Chart2DContour.PeData.Y.UseDataAtLocation(sMyZData, _rows);

Chart2DContour.PePlot.Method = SGraphPlottingMethod.ContourColors;

Beide Diagramme lesen nun aus sMyXData, sMyYData und sMyZData — denselben statischen Arrays. Die 3D-Oberfläche und 2D-Kontur sind zwei GPU-gerenderte Ansichten identischer Daten. Das Ändern des Quell-Arrays und Aufrufen von ReinitializeResetImage() auf beiden Steuerelementen aktualisiert beide Ansichten sofort. Beachten Sie den Achsenmapping-Unterschied: Pe3do verwendet Y als Höhe und Z als Tiefe, während Pesgo Z als Konturwert und Y als räumliche Achse verwendet. UseDataAtLocation handhabt die Zeiger-Indirektion in beiden Fällen.

Schritt 3: Verknüpfter Zoom — 2D-Kontur steuert 3D-Oberfläche

Die GigaPrime3D-Demo verknüpft die beiden Ansichten, sodass das Zoomen der 2D-Kontur automatisch die 3D-Oberfläche auf denselben Bereich zoomt. Wenn der Benutzer ein Zoom-Rechteck auf dem Konturdiagramm aufzieht, wird das PeZoomIn-Ereignis ausgelöst und der Code liest die Zoom-Grenzen der Kontur, wendet sie als manuelle Achsenbereiche auf die 3D-Oberfläche an und löst einen effizienten Neuaufbau aus:

// When user zooms the 2-D contour, sync the 3-D surface view
private void Chart2DContour_OnPeZoomIn(object sender, EventArgs e)
{
    // Enable pixel shader culling — only render triangles in view
    Chart3DSurface.PeGrid.Configure.DxPsManualCullXZ = true;

    // Transfer 2-D zoom extents → 3-D manual axis range
    Chart3DSurface.PeGrid.Configure.ManualScaleControlX = ManualScaleControl.MinMax;
    Chart3DSurface.PeGrid.Configure.ManualMinX = Chart2DContour.PeGrid.Zoom.MinX;
    Chart3DSurface.PeGrid.Configure.ManualMaxX = Chart2DContour.PeGrid.Zoom.MaxX;

    Chart3DSurface.PeGrid.Configure.ManualScaleControlZ = ManualScaleControl.MinMax;
    Chart3DSurface.PeGrid.Configure.ManualMinZ = Chart2DContour.PeGrid.Zoom.MinY;
    Chart3DSurface.PeGrid.Configure.ManualMaxZ = Chart2DContour.PeGrid.Zoom.MaxY;

    // Efficient rebuild — skip ranging, rebuild only vertices
    Chart3DSurface.PeFunction.Force3dxVerticeRebuild = true;
    Chart3DSurface.PeData.SkipRanging = true;
    Chart3DSurface.PeFunction.Reinitialize();
    Chart3DSurface.Invalidate();
}

DxPsManualCullXZ ist hier die wichtigste Leistungseigenschaft — sie aktiviert Pixel-Shader-Culling, sodass Dreiecke außerhalb des Zoom-Bereichs von der GPU verworfen statt unsichtbar gerendert werden. Ohne dies würde das Zoomen einer 36-Millionen-Punkte-Oberfläche immer noch jedes Dreieck verarbeiten, auch wenn die meisten außerhalb der Ansicht liegen. SkipRanging teilt der Engine mit, den CPU-seitigen Min/Max-Datenscan zu überspringen (unnötig, da Achsenlimits manuell gesetzt sind), und Reinitialize() baut Achsenskalen neu auf, ohne das gecachte Bild zu löschen. Das Ergebnis: Zoomen einer 6000 × 6000 Oberfläche fühlt sich sofortig an.

Shared-Memory-Architektur: Warum das wichtig ist

Der obige Code demonstriert ProEssentials' architektonisch bedeutsamste Fähigkeit: UseDataAtLocation() speichert einen Zeiger auf Ihr vorhandenes Datenarray — es allokiert nie, kopiert nie, dupliziert nie. Sowohl das Pe3do-3D-Oberflächen- als auch das Pesgo-2D-Kontur-Diagrammsteuerelement halten eine Referenz auf dasselbe sMyYData-Array. Die Daten existieren genau einmal im Speicher.

In der GigaPrime3D-Demo enthält ein 6000 × 6000 Oberflächen-Scan 36 Millionen Float-Werte — ungefähr 150 MB. Eine traditionelle Architektur, bei der jedes Diagramm Daten in internen Speicher kopiert, würde 450 MB verbrauchen: 150 MB für Ihr Quell-Array, 150 MB für die interne Kopie der 3D-Oberfläche und 150 MB für die interne Kopie der 2D-Kontur. ProEssentials verbraucht insgesamt 150 MB — das Quell-Array und sonst nichts.

Dies erweitert sich auf beliebig viele Ansichten. Ein drittes Diagramm mit einem Querschnitt-Linienprofil würde aus denselben Arrays lesen, ohne zusätzliche Speicherkosten. Ein viertes Diagramm mit einem statistischen Histogramm der Oberflächenwerte könnte denselben Zeiger referenzieren. Der Speicherverbrauch skaliert mit Ihrer Datengröße, nicht mit der Anzahl der Visualisierungssteuerelemente.

Jeder Konkurrent erfordert separate Datenobjekte pro Diagramm. SciChart benötigt eine neue XyzDataSeries3D für die 3D-Oberfläche und eine separate UniformHeatmapDataSeries für die 2D-Heatmap — zwei vollständige Kopien. LightningChart erfordert separate Datenobjekte für jede Diagramminstanz. Bei 36 Millionen Punkten fügt jede zusätzliche Kopie 150 MB Allokation, 150 MB GC-überwachten Speicher und eine mehrere Sekunden dauernde Kopieroperation beim Datenladen hinzu.

Architekturprinzip:

ProEssentials behandelt Ihre Daten als einzige Quelle der Wahrheit. Diagrammsteuerelemente sind Ansichten Ihrer Daten, nicht Besitzer von Kopien Ihrer Daten. Dies eliminiert eine ganze Klasse von Problemen: Synchronisierungsfehler, veraltete Daten, Speicheraufblähung und GC-Druck durch die Pflege duplizierter verwalteter Arrays.

Memory FactorProEssentialsTypical Competitor
Source data (6000 × 6000)Your array (shared)Your array (original)
3-D surface copy0 MB — pointer~150 MB internal copy
2-D contour copy0 MB — same pointer~150 MB second copy
Total for dual view~150 MB (data only)~450 MB (data + 2 copies)
Memory saved~300 MB

Sowohl die 3D-Oberfläche (Pe3do) als auch die 2D-Kontur (Pesgo) verwenden dieselbe GPU-Compute-Shader-Pipeline — aktiviert durch dieselbe Eigenschaft PeData.ComputeShader = true. Nicht zwei verschiedene GPU-Implementierungen, sondern eine einheitliche Shader-Pipeline, die auf zwei verschiedene visuelle Darstellungen Ihrer Daten angewendet wird.

GPU Compute Shaders: Eine Pipeline für 3D-Oberflächen und 2D-Konturen

Wie die Code-Auszüge oben zeigen, aktiviert dieselbe Eigenschaft PeData.ComputeShader = true GPU-beschleunigtes Rendering sowohl auf der Pe3do-3D-Oberfläche als auch der Pesgo-2D-Kontur. Die zugrunde liegende Compute-Shader-Pipeline ist identisch: Ihr Datenarray wird einmal in den GPU-Speicher hochgeladen, und der Shader verarbeitet das Gitter parallel über Tausende von GPU-Kernen — ob die Ausgabe ein beleuchtetes 3D-Oberflächennetz oder eine flache 2D-farbabgebildete Kontur ist.

ProEssentials bietet auch Filter2D3D — eine zweistufige Compute-Shader-Optimierung speziell für 2D-Konturdaten. Wenn auf Pesgo mit Datensätzen von 250.000+ Punkten aktiviert, filtert der erste Shader-Pass die sequentiellen Daten verlustfrei vor, und der zweite Pass konstruiert das Konturbild. Dies beschleunigt das Rendering großer Konturen dramatisch ohne Verlust der visuellen Treue.

Für Echtzeit-3D bietet ProEssentials StagingBuffers, die GPU-seitige Kopien von Datenarrays für effizienten CPU-zu-GPU-Transfer aufrechterhalten, plus ReuseDataX- und ReuseDataZ-Flags, die dem Shader mitteilen: 'Nur die Höhe hat sich geändert — überspringe die Neuverarbeitung der Gitterkoordinaten.' Diese Optimierungen sind wichtig beim Streaming von 3D-Oberflächendaten mit 10–30 Updates pro Sekunde, da sie redundante GPU-Arbeit an den Achsen eliminieren, die sich nicht geändert haben.

GPU RenderingProEssentialsSciChartLightningChartSyncfusionDevExpress
3-D surface GPU?✅ Compute shader✅ Game-engine pipeline✅ DirectX❌ No 3-D❌ No 3-D surface
2-D contour GPU?✅ Same compute shader pipeline✅ Heatmap texture✅ DirectX❌ CPU only❌ CPU only
Same GPU code path for 2-D + 3-D?✅ Unified compute shader❌ Different renderers❌ Different renderers
Shared data pointer across views?✅ Zero-copy shared memory❌ Separate DataSeries per chart❌ Separate data objects
Filter2D3D optimization?✅ Two-tier shader for 250K+ contours

Diagrammtyp-Details

ProEssentials' Pe3do-Diagrammobjekt verwendet ein zweistufiges Dispatch-System: PolyMode wählt die Diagrammkategorie (Oberfläche, Balken, Streuung, Polygondaten), und PlottingMethod wählt die Rendering-Variante innerhalb dieser Kategorie (Drahtgitter, schattiert, konturiert, Fläche). Dieses Design bedeutet, dass ein Diagrammsteuerelement alle 3D-Diagrammtypen handhabt — es ist kein Wechsel zwischen verschiedenen Diagrammkomponenten bei Änderung der Visualisierung nötig.

3D-Oberfläche mit Kontur-Overlay

Die 3D-Oberfläche ist ProEssentials' Flaggschiff-3D-Diagrammtyp — und der im GigaPrime3D-Code oben demonstrierte. Er nimmt ein X × Z-Gitter von Y-Höhenwerten und rendert ein kontinuierliches Netz mit konfigurierbarem Drahtgitter, Schattierung, Beleuchtung und Kontur-Farbbändern. Das Setzen von PlottingMethod auf Four (Oberfläche + Kontur) legt den Kontur-Farbverlauf direkt auf das Oberflächennetz.

Die GigaPrime3D-Demo rendert Gitter bis 6000 × 6000 (36 Millionen Vertices) mit Compute Shaders, 256-Band-Konturfärbung, einstellbarer Lichtpositionierung über SetLight() und interaktiver Maus-Drag-Rotation. DuplicateData-Optimierung (DuplicateDataX = PointIncrement, DuplicateDataZ = SubsetIncrement) vermeidet die Übergabe redundanter Gitterkoordinaten — nur eine Zeile X-Werte und eine Spalte Z-Werte werden für ein gleichmäßiges Gitter benötigt.

Mehrere Lichtquellen können im 3D-Raum positioniert werden, und das Pixel-Shader-Culling (DxPsManualCullXZ), das im Zoom-Code demonstriert wird, stellt sicher, dass gezoomte Ansichten nur sichtbare Dreiecke verarbeiten. GridAspect-Eigenschaften steuern die X:Y:Z-Achsenproportionen — die Demo berechnet dynamisch Seitenverhältnisse aus den physischen Abmessungen der gescannten Materialprobe.

2D-Kontur und Heatmap (GPU Compute Shader)

ProEssentials' 2D-Kontur-Rendering verwendet dieselbe GPU-Compute-Shader-Pipeline wie 3D-Oberflächen — wie im GigaPrime3D-Code demonstriert, wo beide Diagramme ComputeShader = true setzen. Das Pesgo-Diagrammobjekt rendert konturfarbene Füllungen (Heatmaps), Konturlinien oder beides aus einem X × Y-Gitter von Z-Höhenwerten.

Die GigaPrime3D-Demo verwendet manuelle SubsetColors mit 256 Bändern, um einen präzisen Blau-Cyan-Grün-Gelb-Rot-Gradienten für die Konturvisualisierung zu definieren — dieselbe Farbkarte wird sowohl auf die 3D-Oberfläche als auch auf die 2D-Kontur angewendet. Konturfärbung unterstützt auch vordefinierte ContourColorSet-Paletten und benutzerdefinierte ContourColors-Arrays mit Interpolation über ContourColorBlends.

SciChart bietet Heatmap-Rendering, aber keine Konturlinien. LightningChart unterstützt Konturlinien und -füllungen. Syncfusion bietet über SfSurfaceChart oberflächenbasiertes Kontur- und Wireframe-Kontur-Rendering. DevExpress bietet ein separates Heatmap-Steuerelement, aber kein Konturlinien-Rendering. ProEssentials, LightningChart und Syncfusion bieten alle Konturlinien-Rendering — aber nur ProEssentials macht es auf dem GPU Compute Shader mit Zero-Copy-Datenzugriff von einem gemeinsamen Zeiger.

3D-Wasserfall mit konturfarbenen Schichten

Wasserfall-Diagramme visualisieren Frequenzspektrumdaten, Schwingungsanalyse und jedes zeitlich veränderliche Signal, bei dem jede Schicht eine Messung zu einem anderen Zeitpunkt oder an einer anderen Position darstellt. ProEssentials rendert Wasserfälle mit PolyMode.Scatter mit PlottingMethod.Area, wobei jedes Subset als gefüllte Flächenschicht im 3D-Raum gezeichnet wird. Konturfärbung wird pro Schicht über WaterfallContours angewendet, was farbbandierte Schichten erzeugt, die den Höhenwerten entsprechen.

Wasserfall-Ränder, Konturfarb-Überblendungen und pro-Subset-Linientypen geben feine Kontrolle über das visuelle Erscheinungsbild. SciChart und LightningChart bieten beide Wasserfall-Diagramme, aber keiner der Konkurrenten bietet das konturfarbene Schicht-Rendering, das ProEssentials nativ bereitstellt.

4D, Delaunay und benutzerdefinierte Polygondaten

ProEssentials unterstützt drei fortgeschrittene Diagrammtypen, die es von jedem Konkurrenten abheben. Das 4D-W-Datensystem (PeData.W) fügt eine unabhängige vierte Datendimension hinzu, die die Oberflächen-Konturfärbung separat von der Y-Achsen-Höhe steuert — SciChart und LightningChart bieten ähnliche Funktionen, aber ProEssentials rendert es durch dieselbe GPU-Compute-Shader-Pipeline, die für Oberflächen und Konturen verwendet wird. Integrierte Delaunay-Triangulation ist einzigartig bei ProEssentials — keine andere WPF-Charting-Bibliothek bietet sie. Siehe Beispiel 415.

Eingebaute Delaunay-Triangulation (PePlot.Option.Delaunay3D = true) wandelt eine unstrukturierte Punktwolke automatisch in eine triangulierte Oberfläche um. Füttern Sie die Engine mit einer flachen Liste von XYZ-Punkten — kein Vor-Gridding erforderlich — und sie trianguliert die XZ-Ebene unter Verwendung von Y als Höhe und erzeugt ein ordentliches Oberflächennetz mit Konturfärbung. Keine andere WPF-Charting-Bibliothek bietet eingebaute Delaunay. Siehe Beispiel 414.

Benutzerdefinierte Polygondaten (PolyMode.PolygonData) ermöglichen beliebige 3D-Geometrie durch Definition roher Vertex-Positionen und pro-Polygon-Farben. Dies wird für benutzerdefinierte 3D-Formen verwendet — Kugeln, importierte Objekte, Engineering-Modelle — gerendert innerhalb desselben Pe3do-Diagrammsteuerelements. Graph-Annotationen unterstützen ebenfalls Polygondaten zum Platzieren von 3D-Form-Annotationen im Datenraum. Siehe Beispiel 406 (Kugel) und Beispiel 416 (komplexe Annotationsformen).

Echtzeit-3D-Streaming

ProEssentials bietet dedizierte Echtzeit-3D-Beispiele (410, 411, 412, 413), die Streaming-Oberflächen, Streuung, Balken und große Compute-Shader-Oberflächen demonstrieren. Die Echtzeit-3D-Pipeline kombiniert ComputeShader mit StagingBuffers für effizienten GPU-Datentransfer, ReuseDataX/ReuseDataZ zum Überspringen der Neuverarbeitung unveränderter Gitterachsen und SkipRanging zum Umgehen CPU-intensiver Min/Max-Scans bei manuell skalierten Achsen.

Beispiel 413 ist das anspruchsvollste: eine große 3D-Oberfläche mit Compute-Shader-Rendering, Ringpuffern und Echtzeit-Datenstreaming. Es demonstriert den vollständigen Optimierungsstapel — DuplicateData zum Teilen von Gitterkoordinaten, StagingBuffers für GPU-seitiges Daten-Caching und Force3dxVerticeRebuild für effiziente Vertex-Updates ohne vollständige Szenen-Rekonstruktion.

SciChart und LightningChart unterstützen beide Echtzeit-3D-Updates, aber keiner bietet die ReuseData-Optimierung (Überspringen der Neuverarbeitung unveränderter Achsen) oder SkipRanging (Umgehung der Bereichsberechnung bei manueller Skalierung). Diese Optimierungen sind wichtig, weil sie redundante CPU- und GPU-Arbeit an den Datenbereichen eliminieren, die sich nicht geändert haben — was in einem Streaming-Szenario typischerweise zwei von drei Achsen sind.

Real-Time 3-DProEssentialsSciChart
3-D circular buffers✅ Built-inManual management
GPU compute on update✅ ComputeShader + StagingBuffersGPU vertex buffer rebuild
Partial axis reuse✅ ReuseDataX / ReuseDataZ❌ Full rebuild
Skip ranging✅ SkipRanging when manual-scaledN/A
Included examples6 real-time 3-D examples (410–413)Several

3D-Kamera, Rotation und Zoom-Interaktion

Die GigaPrime3D-Demo demonstriert ProEssentials' vollständiges 3D-Interaktionsmodell: flüssige Maus-Drag-Rotation, Mausrad-Zoom mit konfigurierbarer Glätte, Shift-Drag-Viewport-Schwenken, Mitteltaste-Lichtpositionierung und Touch-Pinch-Zoom — alles mit einstellbaren Glätteparametern.

Kamerasteuerung umfasst ViewingHeight (Höhenwinkel 0–36), DegreeOfRotation (0–359), DxZoom mit konfigurierbaren Min/Max-Grenzen und DxFOV zur Steuerung der perspektivischen Projektion. Die Demo stellt diese als Schieberegler neben dem Diagramm bereit, was Benutzern präzise Kontrolle über Betrachtungswinkel, Zoom-Distanz, vertikalen und horizontalen Offset und Z-Achsen-Überhöhung gibt — alles aktualisiert die 3D-Ansicht in Echtzeit über On-Demand-Rendering.

DegreePrompting zeigt den aktuellen Rotationswinkel, Zoom-Abstand und Lichtposition während der Interaktion auf dem Bildschirm an. Kombiniert mit On-Demand-Rendering (GPU rendert nur während aktiver Interaktion, stoppt wenn der Benutzer loslässt) bietet dies reaktionsschnelle Interaktion mit null Leerlauf-Stromverbrauch — ein entscheidender Vorteil gegenüber Game-Engine-Schleifen für Laptop- und Kiosk-Deployments.

Konturfarbsysteme: Drei Ansätze

Die GigaPrime3D-Demo verwendet manuelle SubsetColors mit 256 Bändern — iteriert durch ein benutzerdefiniertes Blau-zu-Rot-Gradienten-Array und weist jede Farbe einem SubsetColors-Eintrag zu. Dies gibt Pixel-genaue Kontrolle über die Konturfarb-Rampe und stellt sicher, dass 3D-Oberfläche und 2D-Kontur identische Färbung verwenden.

Für schnellere Einrichtung bieten vordefinierte ContourColorSet-Enums (BlueCyanGreenYellowBrownWhite, Grayscale und andere) sofortige Paletten mit konfigurierbaren ContourColorBlends für glatte Interpolation. Benutzerdefinierte ContourColors-Arrays ermöglichen die Definition exakter Farbstopps an bestimmten Gradientenpositionen.

Die Ankerpunkt-Interpolationstechnik — Definition von Ankerfarben an Werteschwellen und Berechnung linearer RGB-Interpolation dazwischen — erzeugt publikationsreife Farb-Rampen mit präziser Kontrolle an kritischen Datengrenzen. Nach dem Setzen von SubsetColors im Direct3D-Modus stellen Force3dxNewColors und Force3dxVerticeRebuild sicher, dass die GPU sowohl die Farbkarte als auch die Geometrie aktualisiert.

Das Fazit zu 3D- und 2D-wissenschaftlichem Charting

Die GigaPrime3D-Materialoberflächen-Scan-Demo beweist diese Fähigkeiten mit echtem Produktionscode — nicht Marketing-Behauptungen. 36 Millionen Datenpunkte, ein gemeinsames Array, zwei GPU-gerenderte Ansichten, 150 MB eingespart, verknüpfter Zoom mit Pixel-Shader-Culling und industrietaugliche Interaktion. ProEssentials deckt alle 13 Diagrammtypen in diesem Vergleich ab — einschließlich Delaunay-Triangulation aus Punktwolken, die kein Konkurrent bietet. Sowohl 3D-Oberflächen als auch 2D-Konturen rendern durch dieselbe einheitliche GPU-Compute-Shader-Pipeline.

SciChart und LightningChart sind starke 3D-Konkurrenten, die jeweils 12 von 13 Diagrammtypen abdecken. Syncfusion deckt 7 ab mit Oberflächen-, Wireframe-, Kontur-, Streu-, Balken-, Heatmap- und Konturlinien-Unterstützung. DevExpress deckt 5 ab. Aber keiner dieser Konkurrenten bietet gemeinsame Datenzeiger zwischen Diagrammansichten, einheitliches Compute-Shader-Rendering über 2D und 3D oder integrierte Delaunay-Triangulation aus Punktwolken. Für wissenschaftliche, technische, geospatiale, medizinische Bildgebungs-, Metrologie- und Halbleiter-Visualisierung bleiben ProEssentials' 3D- und 2D-Fähigkeiten die umfassendsten im WPF-Charting-Markt.

Leistung & Architektur

Wie GPU Compute Shaders und On-Demand-Rendering Geschwindigkeit ohne kontinuierlichen Stromverbrauch liefern.

Mehr erfahren
Preise & Support

Dauerhafte Lizenzierung, kostenloser unbegrenzter Support und 5-Jahres-TCO im Vergleich über alle fünf Bibliotheken.

Mehr erfahren
Plattformabdeckung

WPF, WinForms, C++ MFC, Delphi VCL und ActiveX — eine Charting-Engine für jeden Windows-Stack.

Mehr erfahren
Fragen zu 3D- oder Kontur-Charting?

ProEssentials-Support ist kostenlos, unbegrenzt und wird direkt von den Entwicklern bereitgestellt, die die 3D-Rendering-Engine gebaut haben. Fragen Sie nach Oberflächen-Rendering, Konturfärbung, Shared Memory, Delaunay-Triangulation oder allem anderen.

Kontaktieren Sie das ProEssentials-Team →

Unsere Aufgabe

Ihr Erfolg ist unser höchstes Ziel, indem wir Ihrem Unternehmen und Ihren Endbenutzern den einfachsten und professionellsten Nutzen bieten.

Wir sind Ingenieure

ProEssentials wurde von professionellen Elektroingenieuren erschaffen, die ihre eigenen Charting-Komponenten benötigten. Treten Sie unserer großen Liste von Top-Engineering-Unternehmen bei, die ProEssentials einsetzen.

Danke sehr

Vielen Dank, dass Sie ein ProEssentials-Kunde sind, und vielen Dank, dass Sie die ProEssentials-Charting-Engine recherchieren.