Στο δημοσίευση εισαγωγής, καλύψαμε τι είναι το Aspose.3D FOSS για .NET και πώς να ξεκινήσετε. Αυτή η δημοσίευση εμβαθύνει στα βασικά χαρακτηριστικά που συνθέτουν τη βιβλιοθήκη, με παραδείγματα κώδικα για κάθε περιοχή.
Όλα τα παραδείγματα υποθέτουν την ακόλουθη οδηγία using:
using Aspose.ThreeD;
using Aspose.ThreeD.Entities;
using Aspose.ThreeD.Shading;
Και το πακέτο NuGet:
dotnet add package Aspose.3D --version 26.1.0
Το Γράφημα Σκηνής
Το γράφημα σκηνής είναι η βασική δομή δεδομένων. Ένα Scene περιέχει ένα RootNode,και κάθε Node μπορεί να έχει θυγατρικούς κόμβους και ένα συνημμένο Entity (όπως ένα Mesh ή Camera).
Δημιουργία και Πλοήγηση Κόμβων
var scene = new Scene();
// Create a hierarchy
var parent = scene.RootNode.CreateChildNode("Parent");
var child1 = parent.CreateChildNode("Child1");
var child2 = parent.CreateChildNode("Child2");
// Navigate the tree
Console.WriteLine("Root children: " + scene.RootNode.ChildNodes.Count);
Console.WriteLine("Parent children: " + parent.ChildNodes.Count);
Συνημμένο Entities σε Κόμβους
Οι οντότητες είναι το οπτικό περιεχόμενο της σκηνής – πλέγματα, κάμερες και φωτισμοί. Συνδέστε τις χρησιμοποιώντας CreateChildNode:
var scene = new Scene();
// Create a box primitive and attach it to the scene
var box = new Box(2, 2, 2);
var boxNode = scene.RootNode.CreateChildNode("BoxNode", box);
// Create a sphere primitive
var sphere = new Sphere(1);
var sphereNode = scene.RootNode.CreateChildNode("SphereNode", sphere);
scene.Save("primitives.gltf");
Ενσωματωμένα Πρωτόγονα
Η έκδοση .NET περιλαμβάνει κλάσεις παραμετρικών σχημάτων που δημιουργούν γεωμετρία χωρίς χειροκίνητη κατασκευή κορυφών:
| Πρωτότυπο | Περιγραφή |
|---|---|
Box | Κουτί ευθυγραμμισμένο με τους άξονες με ρυθμιζόμενο πλάτος, ύψος και βάθος |
Sphere | Παραμετρική σφαίρα με ρυθμιζόμενη ακτίνα |
Cylinder | Παραμετρικός κύλινδρος με ρυθμιζόμενες ακτίνες πάνω/κάτω και ύψος |
Αυτά τα πρωτότυπα μπορούν να συνδεθούν απευθείας σε κόμβους ή να μετατραπούν σε ένα Mesh μέσω ToMesh():
var cylinder = new Cylinder(1, 1, 2);
var mesh = cylinder.ToMesh();
Console.WriteLine("Vertices: " + mesh.ControlPoints.Count);
Console.WriteLine("Polygons: " + mesh.PolygonCount);
Κατασκευή Mesh
Αν χρειάζεστε πλήρη έλεγχο, δημιουργήστε meshes από το μηδέν χρησιμοποιώντας σημεία ελέγχου και ορισμούς πολυγώνων:
var mesh = new Mesh();
// Add vertex positions
mesh.ControlPoints.Add(new Vector4(0, 0, 0, 1.0f));
mesh.ControlPoints.Add(new Vector4(1, 0, 0, 1.0f));
mesh.ControlPoints.Add(new Vector4(0.5f, 1, 0, 1.0f));
// Define a triangle face
mesh.CreatePolygon(0, 1, 2);
// Attach to a scene
var scene = new Scene();
scene.RootNode.CreateChildNode("triangle", mesh);
scene.Save("triangle.stl");
Τα σημεία ελέγχου χρησιμοποιούν Vector4 με το w το στοιχείο ορίζεται σε 1.0f για τυπικές Καρτεσιανές θέσεις. Τα πολύγωνα ορίζονται με τη μεταβίβαση δεικτών σημείων ελέγχου σε CreatePolygon().
Μετασχηματισμοί
Κάθε Node έχει ένα Transform ιδιότητα που ελέγχει τη τοπική του θέση, περιστροφή και κλίμακα:
var scene = new Scene();
var node = scene.RootNode.CreateChildNode("Moved");
node.Transform.Translation = new FVector3(5, 0, 0);
node.Transform.Scale = new FVector3(2, 2, 2);
Κληρονομικότητα Μετασχηματισμού
Οι μετασχηματισμοί συντίθενται μέσω της ιεραρχίας της σκηνής. Η θέση ενός παιδιού σε παγκόσμιο χώρο είναι το γινόμενο όλων των μετασχηματισμών των προγόνων:
var scene = new Scene();
var parent = scene.RootNode.CreateChildNode("Parent");
parent.Transform.Translation = new FVector3(10, 0, 0);
var child = parent.CreateChildNode("Child");
child.Transform.Translation = new FVector3(5, 0, 0);
// Child's world position is (15, 0, 0)
// Access via child.GlobalTransform
GlobalTransform
Η μόνο για ανάγνωση GlobalTransform ιδιότητα σε κάθε Node παρέχει τον υπολογισμένο πίνακα μετασχηματισμού σε παγκόσμιο χώρο μετά τη σύνθεση όλων των μετασχηματισμών προγόνων. Πρόσβαση στο αποτέλεσμα μέσω node.GlobalTransform.Matrix.
Υλικά
Η βιβλιοθήκη περιλαμβάνει τρεις τύπους υλικών με αυξανόμενη πολυπλοκότητα:
LambertMaterial
Κλασικό υλικό μόνο διασκορπισμού:
var material = new LambertMaterial("WoodMaterial");
material.Diffuse = new Vector4(0.6f, 0.4f, 0.2f, 1.0f);
material.Ambient = new Vector4(0.1f, 0.1f, 0.1f, 1.0f);
material.Transparency = 0.0f;
PhongMaterial
Επεκτείνει το Lambert με αντανακλαστικές αντανακλάσεις:
var material = new PhongMaterial("ShinyMetal");
material.Specular = new Vector4(0.8f, 0.8f, 0.8f, 1.0f);
material.Shininess = 50.0f;
material.SpecularPower = 32.0f;
PbrMaterial
Υλικό απόδοσης βασισμένο στη φυσική που χρησιμοποιείται από το glTF 2.0:
var material = new PbrMaterial("GoldPBR");
material.BaseColor = new Vector4(1.0f, 0.8f, 0.2f, 1.0f);
material.Metallic = 0.9f;
material.Roughness = 0.1f;
material.Occlusion = 1.0f;
Τα υλικά PBR υποστηρίζουν θέσεις υφής για βασικό χρώμα, μεταλλικό/τραχύτητα, κανονική, εκπομπή και χάρτες απόσβεσης μέσω ιδιοτήτων διαδρομής υφής τύπου string.
Βοηθητικά Μαθηματικά
Η βιβλιοθήκη παρέχει ένα σύνολο βασικών μαθηματικών για 3D χωρικές λειτουργίες:
Τύποι Διανυσμάτων
| Τύπος | Συστατικά | Ακρίβεια | Κοινή Χρήση |
|---|---|---|---|
Vector2 | X, Y | float | συντεταγμένες υφής UV |
Vector3 | X, Y, Z | float | Διανύσματος γενικής χρήσης 3-συστατικών |
Vector4 | X, Y, Z, W | float | Σημεία ελέγχου, κανονικές |
FVector3 | X, Y, Z | float | Ιδιότητες μετασχηματισμού (Μετατόπιση, Κλίμακα) |
FVector4 | X, Y, Z, W | float | Δεδομένα στοιχείου Vertex |
Quaternion
Τα Quaternions αντιπροσωπεύουν περιστροφές χωρίς gimbal lock:
var rotation = new Quaternion(0, 0, 0, 1); // Identity
node.Transform.Rotation = rotation;
Matrix4
4x4 transformation matrices for composing transforms:
// Matrix operations are used internally by Transform
// and GlobalTransform for world-space computation
BoundingBox
Πλαίσια περιβάλλοντος ευθυγραμμισμένα με τους άξονες για χωρικά ερωτήματα:
// BoundingBox stores Minimum and Maximum FVector3 corners
// Used for frustum culling and spatial partitioning
Vertex Elements
Τα πλέγματα μπορούν να μεταφέρουν πρόσθετα επίπεδα δεδομένων ανά κορυφή πέρα από τις θέσεις:
- VertexElementNormal – κανονικές επιφάνειας για υπολογισμούς φωτισμού.
- VertexElementUV – συντεταγμένες υφής για την απεικόνιση εικόνων πάνω σε γεωμετρία.
- VertexElementVertexColor – δεδομένα χρώματος RGBA ανά κορυφή.
Κάθε στοιχείο κορυφής έχει ένα MappingMode (ανά σημείο ελέγχου, ανά κορυφή πολυγώνου ή ανά πολύγωνο) και ένα ReferenceMode (απευθείας τιμές ή τιμές με δείκτη).
Animation Clips
Το Scene Η κλάση υποστηρίζει ονομαστικά κλιπ ανίμασης μέσω CreateAnimationClip() και GetAnimationClip(). Στην τρέχουσα έκδοση FOSS, η δημιουργία και η αναζήτηση κλιπ ανίμασης είναι λειτουργικές, αλλά τα δεδομένα keyframe και η αναπαραγωγή δεν έχουν ακόμη υλοποιηθεί.
var scene = new Scene();
var clip = scene.CreateAnimationClip("Walk");
// Retrieve by name
var found = scene.GetAnimationClip("Walk");
Console.WriteLine("Clip found: " + (found != null));
Τι Ακολουθεί
Η επόμενη ανάρτηση καλύπτει τη δουλειά με μορφές αρχείων 3D στο .NET – έναν πρακτικό οδηγό, μορφή-με-μορφή, για OBJ, STL, glTF, FBX και 3MF με επιλογές φόρτωσης/αποθήκευσης και πρότυπα μαζικής μετατροπής.