Kaip .NET aplinkoje įkelti 3D modelius
Aspose.3D for .NET suteikia paprastą API, leidžiantį atverti 3D failus be natūralių priklausomybių. Įkėlus failą į Scene objektą, galite vaikščioti po mazgų hierarchiją ir skaityti geometrijos duomenis kiekvienam tinklui.
Žingsnis po žingsnio vadovas
Žingsnis 1: Įdiekite paketą
Pridėkite NuGet paketą į savo projektą:
dotnet add package Aspose.3D --version 26.1.0Patikrinkite:
using Aspose.ThreeD;
Console.WriteLine("Aspose.3D loaded.");2 žingsnis: importuoti scenos klasę
Scene klasė yra aukščiausio lygio konteineris visiems 3D duomenims. Importuokite vardų sritį:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;Žingsnis 3: Įkelti failą
Naudokite Scene.Open(), kad įkeltumėte bet kurį palaikomą formatą. Biblioteka nustato formatą pagal failo plėtinį:
var scene = new Scene();
scene.Open("model.obj");Arba naudokite statinę gamyklą:
var scene = Scene.FromFile("model.obj");Abu palaiko OBJ, STL, glTF 2.0 / GLB, FBX, COLLADA, PLY ir 3MF.
Žingsnis 4: Naršyti scenos mazgus
Įkelta scena yra Node objektų medis, kurio šaknis yra 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);Kiekvienas Node gali turėti Entity (tinklelį, kamerą, šviesą). Patikrinkite node.Entity prieš prieigą.
Žingsnis 5: Prieiga prie viršūnių ir daugiakampių duomenų
Paversti mazgo objektą į Mesh ir perskaityti jo valdymo taškus bei daugiakampius:
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})");
}
}
}Žingsnis 6: taikyti formatui specifines įkėlimo parinktis
Norint gauti detalią kontrolę, perduokite LoadOptions subklasę:
var options = new ObjLoadOptions
{
FlipCoordinateSystem = true,
Scale = 0.01,
EnableMaterials = true
};
var scene = new Scene();
scene.Open("model.obj", options);Kitos parinkčių klasės: FbxLoadOptions, GltfLoadOptions, StlLoadOptions, ColladaLoadOptions, PlyLoadOptions.
Įprastos problemos ir sprendimai
ImportException kai kviečiamas Scene.Open()
Failas gali būti sugadintas arba nepalaikomo formato variante. Patikrinkite, ar failas atsidaro 3D peržiūros programoje ir ar formatas yra palaikomų sąraše.
Trūkstamos medžiagos po OBJ įkėlimo
Įdėkite .mtl failą šalia .obj failo ir užtikrinkite ObjLoadOptions.EnableMaterials = true.
Koordinačių sistemos nesutapimas (modelis atrodo pasukęs)
Nustatykite ObjLoadOptions.FlipCoordinateSystem = true arba pritaikykite sukimosi transformaciją šaknies mazgo Transform.
NullReferenceException prieiga node.Entity
Ne kiekvienas mazgas neša geometriją. Visada patikrinkite if (node.Entity is Mesh mesh) prieš pasiekiant tinklelio savybes.
Dažnai užduodami klausimai (DUK)
Kuriuos 3D formatus galiu įkelti?
OBJ, STL (binarinis ir ASCII), glTF 2.0 / GLB, FBX, COLLADA (DAE), PLY ir 3MF.
Ar galiu įkelti iš srauto?
Taip. Scene.Open() priima Stream:
using var stream = File.OpenRead("model.glb");
scene.Open(stream);Kaip gauti paviršiaus normales?
Įkėlę, iškvieskite mesh.GetElement(VertexElementType.Normal), kad pasiektumėte VertexElementNormal sluoksnį.
Ar biblioteka yra gijų saugi?
Kiekvienas Scene egzempliorius yra nepriklausomas. Atskirių failų įkėlimas į atskirus Scene egzempliorius iš atskirų gijų yra saugus.