다음에서 소개 게시물, 우리는 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 공간 연산을 위한 수학 기본 요소 집합을 제공합니다:

벡터 유형

형식컴포넌트정밀도일반 사용
Vector2X, YfloatUV 텍스처 좌표
Vector3X, Y, Zfloat범용 3요소 벡터
Vector4X, Y, Z, Wfloat제어점, 노멀
FVector3X, Y, Zfloat변환 속성 (이동, 스케일)
FVector4X, Y, Z, Wfloat버텍스 요소 데이터

쿼터니언

쿼터니언은 짐벌 락 없이 회전을 나타냅니다:

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에 대한 실용적인 형식별 가이드로, 로드/저장 옵션 및 배치 변환 패턴을 포함합니다.