소개

Aspose.3D FOSS for TypeScript (@aspose/3d)은 Node.js를 주 대상으로 설계된 오픈소스 MIT 라이선스 3D 파일 포맷 라이브러리입니다. 3D 모델 뷰어, 포맷 변환기, 기하학 처리 도구 또는 서버-사이드 3D 파이프라인을 구축하는 개발자는 단일 명령어로 설치할 수 있습니다( Installation guide 참고). 설치 후 바로 3D 콘텐츠를 로드하고, 구성하고, 내보낼 수 있습니다. 이 라이브러리는 Node.js의 require('fs')와 Buffer를 사용합니다; 브라우저에서 사용하려면 해당 API에 대한 적절한 shim이 필요하며 공식적으로 지원되지 않습니다.

이 라이브러리는 주요 교환 포맷 — OBJ, glTF 2.0 / GLB, STL, 3MF, 그리고 COLLADA를 import와 export 모두 지원합니다. FBX import/export 클래스가 존재하지만 아직 포맷 자동 감지에 연결되지 않았습니다. 씬 그래프 API은 3D 저작 도구에서 익숙한 모델을 그대로 반영합니다: Scene가 rootNode을 보유하고, 각 Node는 자식 노드와 엔티티 객체(Mesh, Camera, Light)를 가질 수 있으며, 변환 계층 구조는 읽기와 쓰기를 위해 완전히 접근 가능합니다.

핵심 기능

  • 다중 형식 I/O: OBJ (와 함께) 가져오기 및 내보내기 .mtl materials), glTF 2.0 / GLB, STL (binary and ASCII), 3MF, 및 COLLADA를 파일 경로와 메모리 내에서 모두 지원 Buffer 객체. FBX 지원은 아직 자동 감지에 연결되지 않았습니다.
  • 씬 그래프 API: Scene, Node, Mesh, Camera, Light 전체 부모/자식 관리가 가능한 계층 구조; 노드를 재귀적으로 통해 탐색 node.childNodes
  • PBR 재질 시스템: Lambert, Phong, 및 PBR (metallic/roughness) 재질을 통해 접근 가능 node.material
  • 메쉬 작업: 원시 정점 데이터에 접근 mesh.controlPoints (배열 Vector4), 폴리곤 인덱스에 접근 mesh.polygonCount, 그리고 정점 요소 채널에 접근 mesh.getElement()
  • 수학 유틸리티: Vector2, Vector3, Vector4, Matrix4, Quaternion, 그리고 공간 계산을 위한 경계 상자 유형
  • 애니메이션 시스템: 키프레임 애니메이션 with AnimationClip, AnimationChannel, 및 보간 곡선 (linear, Bezier, TCB spline)
  • 포맷별 옵션: 포맷별 LoadOptions / SaveOptions 클래스는 좌표 플리핑, 스케일, 재질 로딩 및 기타를 제어합니다

시작하기

패키지를 소스에서 빌드하십시오. Node.js 18 이상이 필요합니다; TypeScript 5.0 이상을 권장합니다.

git clone https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-TypeScript.git
cd Aspose.3D-FOSS-for-TypeScript
npm install
npm run build

OBJ 파일을 로드하고 씬을 검사합니다:

import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';

const scene = new Scene();
const options = new ObjLoadOptions();
options.enableMaterials = true;
scene.open('model.obj', options);

for (const node of scene.rootNode.childNodes) {
    if (node.entity && 'controlPoints' in node.entity) {
        const mesh = node.entity as any;
        console.log(`Mesh "${node.name}": ${mesh.controlPoints.length} vertices`);
    }
}

씬 그래프 API

모든 씬은 Node 객체들의 트리이며, scene.rootNode을(를) 루트로 합니다. addChildNode()로 계층을 구축하고, entity 속성을 통해 Camera 또는 Light와 같은 엔티티를 노드에 연결하며, 각 노드의 로컬 또는 월드 공간 변환은 transform와 globalTransform을 통해 읽습니다.

import { Scene, Node, Camera, Light } from '@aspose/3d';

const scene = new Scene();

const cameraNode = new Node('MainCamera');
cameraNode.entity = new Camera('MainCamera');
scene.rootNode.addChildNode(cameraNode);

const lightNode = new Node('KeyLight');
lightNode.entity = new Light('KeyLight');
scene.rootNode.addChildNode(lightNode);

for (const child of scene.rootNode.childNodes) {
    console.log(`${child.name}: ${child.entity?.constructor.name}`);
}

수학 유틸리티

Vector3, Vector4, Matrix4, 및 Quaternion은(는) 라이브러리의 모든 기하학 연산을 지원합니다. Vector3와 Vector4는 x/y/z(/w) 구성 요소와 length, dot(), cross()를 노출합니다; Matrix4은 m00–m33를 통해 접근할 수 있는 4×4 그리드이며 transpose()와 concatenate()을 포함합니다; Quaternion은 회전 수학을 위해 normalize(), conjugate(), inverse(), dot()를 제공합니다.

import { Vector3, Quaternion, Matrix4 } from '@aspose/3d/utilities';

const position = new Vector3(1.0, 2.0, 3.0);
const rotation = new Quaternion(1.0, 0.0, 0.0, 0.0);
const transform = new Matrix4();

console.log(`length=${position.length} determinant=${transform.determinant}`);
console.log(`rotation w=${rotation.w} x=${rotation.x} y=${rotation.y} z=${rotation.z}`);

참조

관련 리소스