.NET에서 3D 모델을 다운로드하는 방법
Aspose.3D for .NET은 원주민 의존성 없이 3D 파일을 열기 위한 간단한 API를 제공합니다. 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 및 Polygon 데이터에 액세스
노드의 본질을 삽입하여 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 로드 후 실종된 재료
장소 : The Place .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 별도의 끈에서 발생하는 사례는 안전합니다.