에서 소개 게시물, 우리는 Aspose.3D FOSS for Java가 무엇인지와 시작 방법을 다루었습니다. 이 게시물은 라이브러리를 구성하는 핵심 기능들을 더 깊이 살펴보며, 각 영역에 대한 코드 예제를 제공합니다.
모든 예제는 다음과 같은 import를 전제로 합니다:
import com.aspose.threed.*;
그리고 Maven 의존성은 다음과 같습니다:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
Scene Graph API
씬 그래프는 Aspose.3D FOSS for Java의 기반입니다. 파일에서 로드되든 프로그래밍으로 생성되든 모든 3D 모델은 루트가 있는 Scene 객체.
Scene
그 Scene 클래스는 모든 작업의 진입점입니다. 빈 씬을 만들거나 파일에서 로드할 수 있습니다:
// Empty scene
Scene scene = new Scene();
// Load from file
Scene loaded = Scene.fromFile("model.obj");
// Load with explicit options
Scene fromStl = Scene.fromFile("part.stl", new StlLoadOptions());
노드 트리의 루트는 다음을 통해 접근합니다 getRootNode().
Node
A Node 는 씬 트리에서 이름이 지정된 위치를 나타냅니다. 노드는 자식을 가질 수 있어 계층 구조를 형성합니다. 각 노드는 로컬 Transform 및 계산된 GlobalTransform.
Scene scene = new Scene();
// Create a child node under the root
Node box = scene.getRootNode().createChildNode("Box");
// Create a nested hierarchy
Node arm = scene.getRootNode().createChildNode("Arm");
Node hand = arm.createChildNode("Hand");
Node finger = hand.createChildNode("Finger");
노드를 독립적으로 생성한 뒤 나중에 연결할 수도 있습니다:
Node standalone = new Node("Standalone");
scene.getRootNode().getChildNodes().add(standalone);
Entity and Mesh
An Entity 는 노드에 부착될 수 있는 모든 것(지오메트리, 카메라, 조명)의 추상 기본 클래스입니다. 가장 일반적인 엔티티 유형은 Mesh, 이는 폴리곤 지오메트리(정점, 면, 노멀)를 보유합니다.
Scene scene = Scene.fromFile("cube.obj");
// Traverse nodes and inspect entities
for (Node child : scene.getRootNode().getChildNodes()) {
Entity entity = child.getEntity();
if (entity instanceof Mesh) {
Mesh mesh = (Mesh) entity;
System.out.println("Node: " + child.getName());
System.out.println(" Vertices: " + mesh.getControlPoints().size());
}
}
Camera
Camera는 노드에 부착되는 엔티티입니다:
Scene scene = new Scene();
Node cameraNode = scene.getRootNode().createChildNode("MainCamera");
// Camera entity can be assigned to the node
Camera 정의는 이를 지원하는 포맷(예: glTF)으로 내보낼 때 보존됩니다.
참고: The Light 클래스는 Java 에디션에서 사용할 수 없습니다. 가져온 파일의 씬 조명 데이터는 일반적으로 저장됩니다. Entity 객체들.
포맷에 구애받지 않는 로드 및 저장
이 라이브러리의 강점 중 하나는 씬 그래프가 포맷에 독립적이라는 점입니다. 지원되는 모든 포맷에서 로드하고, 단일 API를 통해 씬을 조작한 뒤, 지원되는 모든 포맷으로 저장할 수 있습니다.
// Load OBJ, save as glTF
Scene scene = Scene.fromFile("input.obj");
scene.save("output.gltf");
// Load FBX, save as STL (FBX is import only)
Scene scene2 = Scene.fromFile("character.fbx");
scene2.save("character.stl");
// Load STL, save as GLB
Scene scene3 = Scene.fromFile("part.stl", new StlLoadOptions());
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene3.save("part.glb", opts);
포맷은 파일 확장자로 결정됩니다. 또한 명시적인 저장 옵션을 전달하여 출력물을 제어할 수 있습니다:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
재료
Aspose.3D FOSS for Java는 PBR(Physically Based Rendering) 재질 모델을 통해 제공합니다 PbrMaterial. 이것은 Java 에디션에서 유일한 구체적인 재질 클래스입니다.
PbrMaterial
알베도, 메탈니스, 러프니스 파라미터를 사용하는 물리 기반 렌더링 재료입니다. 이는 glTF 및 최신 실시간 엔진에서 표준 재료 모델입니다.
PbrMaterial pbr = new PbrMaterial();
pbr.setAlbedo(new Vector4(0.8, 0.2, 0.2, 1.0)); // Red-ish base color
pbr.setMetallicFactor(0.0); // Non-metallic
pbr.setRoughnessFactor(0.5); // Medium roughness
포맷 간 재료 보존은 대상 포맷의 기능에 따라 달라집니다. PBR 재료는 glTF 및 GLB 출력에 자연스럽게 매핑됩니다.
Transform 및 Spatial
모든 Node 씬 그래프에 있는 Transform 그 위치, 회전 및 스케일을 부모에 상대적으로 정의합니다.
로컬 변환
Scene scene = new Scene();
Node node = scene.getRootNode().createChildNode("TestNode");
Transform t = node.getTransform();
t.setTranslation(1, 2, 3); // Position
t.setScale(2, 2, 2); // Uniform scale
t.setEulerAngles(0, 45, 0); // Euler rotation in degrees
글로벌 변환
그 GlobalTransform 계산된 월드 스페이스 변환이며, 전체 부모 체인을 고려합니다. 이는 읽기 전용이며 자동으로 업데이트됩니다.
Node parent = scene.getRootNode().createChildNode("Parent");
parent.getTransform().setTranslation(10, 0, 0);
Node child = parent.createChildNode("Child");
child.getTransform().setTranslation(5, 0, 0);
// Child's global position is (15, 0, 0)
GlobalTransform global = child.getGlobalTransform();
이 부모-자식 변환 상속은 3D 엔진 및 DCC 도구에서 사용되는 표준 씬 그래프 패턴을 따릅니다.
수학 유틸리티
이 라이브러리는 3D 작업을 위한 핵심 수학 타입을 포함합니다.
Vector3
위치, 방향, 법선 및 색상을 나타내는 3요소 벡터입니다.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
// Addition
Vector3 sum = Vector3.add(a, b); // (1, 1, 0)
Matrix4
번역, 회전 및 스케일을 하나의 연산으로 결합하는 4x4 변환 행렬입니다.
Matrix4 mat = new Matrix4();
// Matrix4 is used internally by transforms
// and can be retrieved from GlobalTransform
Quaternion
짐벌 락을 방지하고 부드럽게 보간되는 회전 표현입니다. 쿼터니언은 변환 시스템에서 내부적으로 사용됩니다.
BoundingBox
공간 쿼리, 충돌 검사 및 씬 분석을 위한 축 정렬 경계 상자입니다.
BoundingBox bbox = new BoundingBox();
// BoundingBox can be computed from mesh geometry
알려진 제한 사항
주목할 만한 점은 Scene.render() 이다 지원되지 않음 FOSS 에디션에서. 이를 호출하면 예외를 발생시킵니다 UnsupportedOperationException. 이 라이브러리는 파일 기반 3D 처리 – 로드, 변환 및 저장 – 를 위해 설계되었으며, 실시간 렌더링보다 파일 기반 작업에 중점을 둡니다.
요약
Aspose.3D FOSS for Java의 주요 기능은 다섯 영역으로 나뉩니다:
| 영역 | 클래스 | 목적 |
|---|---|---|
| 씬 그래프 | Scene, Node, Entity, Mesh, Camera | 계층적 모델 표현 |
| 포맷 | OBJ, STL, glTF/GLB에 대한 로드/저장 옵션; FBX에 대한 로드 | 포맷에 구애받지 않는 I/O |
| 재료 | PbrMaterial | 표면 외관 (PBR) |
| 변환 | Transform, GlobalTransform | 공간 위치 지정 |
| 수학 | Vector3, Matrix4, Quaternion, BoundingBox | 3D math primitives |
다음 포스트에서는 OBJ, STL, glTF, FBX를 다루는 실용적인 포맷별 튜토리얼을 자세한 로드 및 저장 옵션과 함께 살펴볼 것입니다.