Πώς να φορτώσετε 3D μοντέλα στο .NET

Πώς να φορτώσετε 3D μοντέλα στο .NET

Το Aspose.3D για .NET παρέχει ένα απλό API για το άνοιγμα 3D αρχείων χωρίς εγχώρια εξάρτηση. Scene αντικείμενο μπορείτε να περπατήσετε τη ιεραρχία των κόμβων και να διαβάσετε τα δεδομένα γεωμετρίας για κάθε μασά.

Βήμα προς βήμα οδηγός

Βήμα 1: Εγκατάσταση του πακέτου

Προσθήκη του πακέτου NuGet στο έργο σας:

dotnet add package Aspose.3D.FOSS

Ελέγξτε :

using Aspose.ThreeD;
Console.WriteLine("Aspose.3D loaded.");

Βήμα 2: Εισαγωγή της κλάσης σκηνής

Η Scene Η τάξη είναι το κορυφαίο δοχείο για όλα τα δεδομένα 3D. Εισαγωγή του ονόματος:

using Aspose.ThreeD;
using Aspose.ThreeD.Formats;

Βήμα 3: Κατεβάστε ένα αρχείο

Χρησιμοποιήστε Scene.Open() Για να φορτώσετε οποιαδήποτε υποστηριζόμενη μορφή. Η βιβλιοθήκη ανιχνεύει τη μορφοποίηση από την επέκταση αρχείου:

var scene = new Scene();
scene.Open("model.obj");

Χρησιμοποιήστε το στατικό εργοστάσιο:

var scene = Scene.FromFile("model.obj");

Και οι δύο υποστηρίζουν OBJ, STL, glTF 2.0 / GLB, FBX, COLLADA, PLY και 3MF.


Βήμα 4: Περπατήστε το σκηνικό

Μια σκηνή φορτισμένη είναι ένα δέντρο Node αντικείμενα που ριζώνουν σε scene.RootNode:

void Walk(Node node, int depth = 0)
{
    var indent = new string(' ', depth * 2);
    Console.WriteLine($"{indent}Node: {node.Name}");
    foreach (var child in node.ChildNodes)
        Walk(child, depth + 1);
}

Walk(scene.RootNode);

Κάθε ένα Node Μπορεί να μεταφέρει ένα Entity (Μετά, κάμερα και φώτα) Δείτε το node.Entity Πριν την πρόσβαση.


Βήμα 5: Πρόσβαση στα Vertex και τα Πολυγόνα Δεδομένα

Κάντε μια ενότητα ενός κόμβου για να Mesh Διαβάστε τα σημεία ελέγχου και τις πολυγόνες:

using Aspose.ThreeD.Entities;

foreach (var node in scene.RootNode.ChildNodes)
{
    if (node.Entity is Mesh mesh)
    {
        Console.WriteLine($"Mesh '{node.Name}': " +
            $"{mesh.ControlPoints.Count} vertices, " +
            $"{mesh.PolygonCount} polygons");

        if (mesh.ControlPoints.Count > 0)
        {
            var v = mesh.ControlPoints[0];
            Console.WriteLine($"  First vertex: ({v.x:F4}, {v.y:F4}, {v.z:F4})");
        }
    }
}

Βήμα 6: Εφαρμόστε επιλογές φόρτισης ειδικά σε μορφή

Για την ομαλή έλεγχο, περάστε το A LoadOptions Η υποκλάση:

var options = new ObjLoadOptions
{
    FlipCoordinateSystem = true,
    Scale = 0.01,
    EnableMaterials = true
};

var scene = new Scene();
scene.Open("model.obj", options);

Άλλες κατηγορίες επιλογών: FbxLoadOptions, GltfLoadOptions, StlLoadOptions, ColladaLoadOptions, PlyLoadOptions.


Κοινά προβλήματα και τακτοποιήσεις

ImportException Όταν καλείται Scene.Open()

Το αρχείο μπορεί να είναι διασπάσιμο ή σε μια παραλλαγή μορφής που δεν υποστηρίζεται. ελέγξτε ότι το αρχεία ανοίγει σε ένα 3D προβολέας και ότι η μορφή βρίσκεται στη λίστα που υποστηρίζονται.

Απεβίβαση υλικού μετά το φορτίο OBJ

τοποθετείτε το .mtl Το αρχείο δίπλα στο .obj Εισαγωγή και διασφάλιση ObjLoadOptions.EnableMaterials = true.

Συντονισμένο σύστημα αδιαφορία (ο μοντέλο εμφανίζεται περιστρεφόμενο)

ΣΕΤΙΔΑ ObjLoadOptions.FlipCoordinateSystem = true ή να εφαρμόσει μια περιστροφή στο ρίζον νύχτα του Transform.

NullReferenceException Πρόσβαση node.Entity

Δεν είναι κάθε κόμβος που φέρει γεωμετρία. πάντα ελέγξτε if (node.Entity is Mesh mesh) Πριν από την πρόσβαση στις ιδιότητες του μαστού.


Συχνές ερωτήσεις (FAQ)

Ποια 3D μορφή μπορώ να φορτώσω;?

OBJ, STL (βινική και ASCII), glTF 2.0 / GLB, FBX, COLLADA (DAE), PLY και 3MF.

Μπορώ να φορτώσω από ένα ρεύμα;?

Ναι . Scene.Open() Αποδέχεται το A Stream:

using var stream = File.OpenRead("model.glb");
scene.Open(stream);

Πώς μπορώ να αποκτήσω φυσιολογικά επιφανειακά;?

Μετά την αναρρίχηση, καλέστε mesh.GetElement(VertexElementType.Normal) Για να αποκτήσετε πρόσβαση στο VertexElementNormal Στάδιο .

Είναι η βιβλιοθήκη ασφαλής;?

Κάθε ένα Scene Η διαδικασία είναι ανεξάρτητη. φορτώστε ξεχωριστά αρχεία σε ξεχώριστα Scene Οι περιπτώσεις από ξεχωριστές γραμμές είναι ασφαλείς.

 Ελληνικά