glTF Mesh Features Beispiel
Contents
[
Hide
]
Erstellen von glTF-Dateien mit EXT_mesh_features
Dieses Beispiel demonstriert, wie eine glTF-Datei mit der Erweiterung EXT_mesh_features mithilfe der Aspose.3D API erstellt wird.
Code-Erklärung
Der folgende C#-Code erstellt ein Mesh mit Kontrollpunkten und Polygonen und fügt dann Feature-IDs zu den Kontrollpunkten hinzu, bevor es in einer glTF-Datei gespeichert wird:
// Dieses Beispiel erstellt eine glTF-Datei mit EXT_mesh_features
// Zuerst erstellen wir ein Mesh
var mesh = new Mesh();
// Kontrollpunkte (Eckpunkte) zum Mesh hinzufügen
// Der erste Satz von vier Punkten erstellt ein Quadrat in der XY-Ebene bei y=1
mesh.ControlPoints.Add(new Vector4(0, 1, 0)); // Punkt 0
mesh.ControlPoints.Add(new Vector4(2, 1, 0)); // Punkt 1
mesh.ControlPoints.Add(new Vector4(2, 2, 0)); // Punkt 2
mesh.ControlPoints.Add(new Vector4(1, 2, 0)); // Punkt 3
// Der zweite Satz von vier Punkten erstellt ein weiteres Quadrat in der XY-Ebene bei y=0
mesh.ControlPoints.Add(new Vector4(3, 0, 0)); // Punkt 4
mesh.ControlPoints.Add(new Vector4(4, 0, 0)); // Punkt 5
mesh.ControlPoints.Add(new Vector4(4, 1, 0)); // Punkt 6
mesh.ControlPoints.Add(new Vector4(3, 1, 0)); // Punkt 7
// Dreieckige Flächen (Polygone) aus den Kontrollpunkten erstellen
// Das erste Quadrat (Punkte 0-3) wird in zwei Dreiecke unterteilt
mesh.CreatePolygon(0, 1, 2); // Dreieck 0-1-2
mesh.CreatePolygon(0, 2, 3); // Dreieck 0-2-3
// Das zweite Quadrat (Punkte 4-7) wird ebenfalls in zwei Dreiecke unterteilt
mesh.CreatePolygon(4, 5, 6); // Dreieck 4-5-6
mesh.CreatePolygon(4, 6, 7); // Dreieck 4-6-7
// Dann erstellen wir ein Benutzerelement, um Feature-IDs zu speichern
// Dies verknüpft Feature-IDs mit Kontrollpunkten
var featureId = (VertexElementUserData)mesh.CreateElement(
VertexElementType.UserData, // Elementtyp
MappingMode.ControlPoint, // Auf Kontrollpunkte anwenden
ReferenceMode.Direct // Direkte Zuordnung (nicht indiziert)
);
// Feature-IDs jedem Kontrollpunkt zuweisen
// Die ersten vier Punkte erhalten ID 0, die nächsten vier erhalten ID 1
featureId.Data = new float[] { 0, 0, 0, 0, 1, 1, 1, 1 };
// Der spezielle Attributname, der der EXT_mesh_features-Spezifikation entspricht, festlegen
// Das Format _FEATURE_ID_<n> wird vom glTF-Exporteur erkannt
featureId.Name = "_FEATURE_ID_0";
// Das Mesh in einer glTF-Binärdatei (GLB) speichern
// Der Exporteur generiert automatisch die Daten für die EXT_mesh_features-Erweiterung
// Einen relativen Pfad für die Ausgabedatei verwenden
(new Scene(mesh)).Save("mesh_feature.glb");
Schlüsselkonzepte
Mesh-Erstellung
- Die Klasse
Mesh
stellt eine polygonale Mesh-Geometrie dar - Kontrollpunkte definieren die Eckpunkte des Mesh
- Die Methode
CreatePolygon
erstellt dreieckige Flächen zwischen Kontrollpunkten
Feature-IDs
- Feature-IDs ermöglichen die Gruppierung von Geometrie innerhalb eines Mesh
- Implementiert über
VertexElementUserData
mit einer speziellen Namenskonvention _FEATURE_ID_0
zeigt an, dass dies ein Feature-ID-Stream ist- Es können mehrere Feature-ID-Streams mit zunehmenden Indizes erstellt werden
Datenzuweisung
- Feature-IDs werden als Gleitkommawerte gespeichert
- Jeder Kontrollpunkt erhält einen entsprechenden Feature-ID-Wert
- In diesem Beispiel verwenden wir zwei unterschiedliche Feature-IDs: 0 und 1
Dateiexport
- Das Speichern im GLB-Format bewahrt alle Features, einschließlich EXT_mesh_features
- Aspose.3D verwaltet die Generierung der Erweiterung automatisch
- Die resultierende Datei enthält Metadaten über die Mesh-Features
- Die Verwendung relativer Pfade macht den Code portabler und einfacher in verschiedenen Umgebungen ausführbar
Dieses Beispiel demonstriert, wie Aspose.3D verwendet werden kann, um glTF-Dateien zu erstellen, die die Erweiterung EXT_mesh_features für eine erweiterte 3D-Datendarstellung nutzen.