Kā ielādēt 3D modeļus .NET

Kā ielādēt 3D modeļus .NET

Aspose.3D for .NET nodrošina vienkāršu API, lai atvērtu 3D failus bez vietējām atkarībām. Pēc faila ielādēšanas Scene objektā var pārvietoties pa mezglu hierarhiju un nolasīt ģeometrijas datus katram tīklam.

Rokasgrāmata soli pa solim

1. solis: instalēt pakotni

Pievienojiet NuGet pakotni savam projektam:

dotnet add package Aspose.3D --version 26.1.0

Pārbaudīt:

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

2. solis: Importēt Scene klasi

Klase Scene ir augstākā līmeņa konteineram visiem 3D datiem. Importējiet nosaukumvietu:

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

3. solis: Ielādēt failu

Izmantojiet Scene.Open(), lai ielādētu jebkuru atbalstītu formātu. Bibliotēka nosaka formātu no faila paplašinājuma:

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

Vai arī izmantojiet statisko ražotni:

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

Abi atbalsta OBJ, STL, glTF 2.0 / GLB, FBX, COLLADA, PLY un 3MF.


4. solis: Pārlūkot ainas mezglus

Ielādēta aina ir Node objektu koks, kura sakne ir 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);

Katrs Node var saturēt Entity (tīkls, kamera, gaisma). Pārbaudiet node.Entity pirms piekļuves.


5. solis: Piekļūt virsotņu un daudzstūru datiem

Pārveido mezgla entītiju uz Mesh un nolasiet tās kontroles punktus un daudzstūrus:

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. solis: Lietot formāta specifiskās ielādes opcijas

Lai iegūtu smalku kontroli, nododiet LoadOptions apakšklasi:

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

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

Citas opciju klases: FbxLoadOptions, GltfLoadOptions, StlLoadOptions, ColladaLoadOptions, PlyLoadOptions.


Bieži sastopamās problēmas un risinājumi

ImportException izsaucot Scene.Open()

Fails var būt bojāts vai neatbalstītā formāta variantā. Pārbaudiet, vai fails atveras 3D skatītājā un vai formāts ir atbalstīto sarakstā.

Trūkstoši materiāli pēc OBJ ielādes

Novietojiet .mtl failu blakus .obj failam un pārliecinieties, ka ObjLoadOptions.EnableMaterials = true.

Koordinātu sistēmas neatbilstība (modelis izskatās pagriezts)

Iestatīt ObjLoadOptions.FlipCoordinateSystem = true vai piemērot rotāciju saknes mezgla Transform.

NullReferenceException piekļūst node.Entity

Ne visi mezgli nes ģeometriju. Vienmēr pārbaudiet if (node.Entity is Mesh mesh) pirms piekļūstat tīkla īpašībām.


Biežāk uzdotie jautājumi (BUJ)

Kādus 3D formātus es varu ielādēt?

OBJ, STL (binārs un ASCII), glTF 2.0 / GLB, FBX, COLLADA (DAE), PLY un 3MF.

Vai varu ielādēt no plūsmas?

Jā. Scene.Open() pieņem Stream:

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

Kā es varu iegūt virsmas normāles?

Pēc ielādes izsauciet mesh.GetElement(VertexElementType.Normal), lai piekļūtu VertexElementNormal slānim.

Vai bibliotēka ir pavediena droša?

Katra Scene instance ir neatkarīga. Atsevišķu failu ielāde atsevišķās Scene instancēs no atsevišķiem pavedieniem ir droša.

 Latviešu