다음에서 소개 게시물, 우리는 Aspose.3D FOSS for .NET가 무엇인지와 시작 방법을 다루었습니다. 이 게시물은 라이브러리를 구성하는 주요 기능들을 더 깊이 살펴보며, 각 영역에 대한 코드 예제를 제공합니다.
모든 예제는 다음 using 지시문을 가정합니다:
using Aspose.ThreeD;
using Aspose.ThreeD.Entities;
using Aspose.ThreeD.Shading;
그리고 NuGet 패키지는 다음과 같습니다:
dotnet add package Aspose.3D --version 26.1.0
씬 그래프
씬 그래프는 핵심 데이터 구조입니다. A Scene contains a 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);
엔티티를 노드에 연결하기
엔티티는 씬의 시각적 콘텐츠이며, 메쉬, 카메라, 조명으로 구성됩니다. 다음으로 부착합니다 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);
메시 구성
전체 제어가 필요하다면, 제어점과 폴리곤 정의를 사용하여 처음부터 메시를 만들 수 있습니다:
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 재료는 문자열 텍스처 경로 속성을 통해 기본 색상, 금속성/거칠기, 노멀, 방사, 그리고 오클루전 맵에 대한 텍스처 슬롯을 지원합니다.
수학 유틸리티
이 라이브러리는 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 | 버텍스 요소 데이터 |
쿼터니언
쿼터니언은 짐벌 락 없이 회전을 나타냅니다:
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
버텍스 요소
메시는 위치 외에 추가적인 정점당 데이터 레이어를 포함할 수 있습니다:
- VertexElementNormal – 조명 계산을 위한 표면 법선.
- VertexElementUV – 이미지를 기하학에 매핑하기 위한 텍스처 좌표.
- VertexElementVertexColor – 정점당 RGBA 색상 데이터.
각 버텍스 요소는 MappingMode (제어점당, 폴리곤 정점당, 또는 폴리곤당) 및 ReferenceMode (직접 값 또는 인덱스 값).
애니메이션 클립
그 Scene 클래스는 명명된 애니메이션 클립을 지원합니다 CreateAnimationClip() 및 GetAnimationClip(). 현재 FOSS 에디션에서는 애니메이션 클립 생성 및 조회가 기능하지만, 키프레임 데이터와 재생은 아직 구현되지 않았습니다.
var scene = new Scene();
var clip = scene.CreateAnimationClip("Walk");
// Retrieve by name
var found = scene.GetAnimationClip("Walk");
Console.WriteLine("Clip found: " + (found != null));
다음은
다음 게시물에서는 다룹니다 .NET에서 3D 파일 형식 작업 – OBJ, STL, glTF, FBX, 3MF에 대한 실용적인 형식별 가이드로, 로드/저장 옵션 및 배치 변환 패턴을 포함합니다.