특징 및 기능
Aspose.3D FOSS for TypeScript는 로드, 구성 및 3D 씬을 내보내기 위한 MIT 라이선스 Node.js 라이브러리입니다. 완전한 TypeScript 타입 정의와 단일 런타임 종속성 (xmldom), 그리고 6가지 주요 3D 파일 형식을 지원합니다. 이 페이지는 모든 기능 영역에 대한 주요 참고 자료이며 각 영역에 대한 실행 가능한 TypeScript 코드 예제를 포함합니다.
설치 및 설정
단일 명령어로 npm에서 패키지를 설치합니다:
npm install @aspose/3d이 패키지는 CommonJS를 대상으로 하며 Node.js 18 이상이 필요합니다. 설치 후, 귀하의 tsconfig.json 전체 호환성을 위해 다음 컴파일러 옵션이 포함되어 있는지 확인하십시오:
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"moduleResolution": "node",
"esModuleInterop": true,
"strict": true
}
}주 모듈을 가져옵니다 Scene 클래스를 패키지 루트에서 가져옵니다. 형식별 옵션 클래스는 해당 서브 경로에서 가져옵니다:
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
import { GltfSaveOptions, GltfFormat } from '@aspose/3d/formats/gltf';특징 및 기능
포맷 지원
Aspose.3D FOSS for TypeScript는 주요 3D 파일 포맷 6가지를 읽고 쓸 수 있습니다. 로드 시 바이너리 매직 넘버를 기반으로 포맷을 자동 감지하므로, 소스 포맷을 명시적으로 지정할 필요가 없습니다.
| 포맷 | 읽기 | 쓰기 | 참고사항 |
|---|---|---|---|
| OBJ (Wavefront) | 예 | 예 | 읽기/쓰기 .mtl 재질; 사용 ObjLoadOptions.enableMaterials 가져오기용 |
| glTF 2.0 | 예 | 예 | JSON 텍스트 형식; PBR 재료 |
| GLB | 예 | 예 | Binary glTF; 설정 GltfSaveOptions.binaryMode = true |
| STL | 예 | 예 | 바이너리 및 ASCII; 전체 라운드트립 검증 완료 |
| 3MF | 예 | 예 | 3D Manufacturing Format with color and material metadata |
| FBX | 아니오* | 아니오* | Importer/exporter는 존재하지만 포맷 자동 감지는 연결되지 않았습니다 |
| COLLADA (DAE) | 예 | 예 | 단위 스케일링, 기하학, 재질 및 애니메이션 클립 |
재질이 포함된 OBJ 로드:
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
const options = new ObjLoadOptions();
options.enableMaterials = true;
options.flipCoordinateSystem = false;
options.scale = 1.0;
options.normalizeNormal = true;
scene.open('model.obj', options);GLB(바이너리 glTF) 저장:
import { Scene } from '@aspose/3d';
import { GltfSaveOptions, GltfFormat } from '@aspose/3d/formats/gltf';
const scene = new Scene();
// ... build or load scene content
const opts = new GltfSaveOptions();
opts.binaryMode = true;
scene.save('output.glb', GltfFormat.getInstance(), opts);씬 그래프
모든 3D 콘텐츠는 트리 형태로 구성됩니다 Node 객체가 루트인 scene.rootNode. 각 노드는 가질 수 있습니다 Entity (a Mesh, Camera, Light, 또는 다른 SceneObject) 및 a Transform 부(parent)에 상대적으로 위치시킵니다.
핵심 씬 그래프 클래스:
Scene: 최상위 컨테이너; 보유합니다rootNode및animationClipsNode: 이름이 지정된 트리 노드와childNodes,entity,transform, 및materialsEntity: 부착 가능한 객체의 기본 클래스 (Mesh,Camera,Light)SceneObject: 다음과 공유되는 기본 클래스Node및EntityA3DObject: 다음을 포함하는 루트 기본 클래스name및 속성 가방Transform: 로컬 변환, 회전 (Euler 및 Quaternion), 및 스케일
씬 그래프 순회:
import { Scene, Node, Mesh } from '@aspose/3d';
const scene = new Scene();
scene.open('model.obj');
function visit(node: Node, depth: number = 0): void {
const indent = ' '.repeat(depth);
console.log(`${indent}Node: ${node.name}`);
if (node.entity) {
console.log(`${indent} Entity: ${node.entity.constructor.name}`);
}
for (const child of node.childNodes) {
visit(child, depth + 1);
}
}
visit(scene.rootNode);프로그래밍 방식으로 씬 계층 구조 만들기:
import { Scene, Node } from '@aspose/3d';
const scene = new Scene();
const parent = scene.rootNode.createChildNode('chassis');
const wheel = parent.createChildNode('wheel_fl');
wheel.transform.translation.set(0.9, -0.3, 1.4);Geometry와 Mesh
Mesh 은 기본 기하학 유형입니다. 다음을 확장합니다 Geometry 및 제어점(정점), 폴리곤 인덱스, 그리고 노멀, UV, 정점 색상을 위한 정점 요소를 노출합니다.
핵심 Geometry 클래스:
Mesh: 다음을 포함하는 폴리곤 메쉬controlPoints및polygonCountGeometry: 정점 요소 관리를 포함하는 기본 클래스VertexElementNormal: 정점당 또는 폴리곤-정점당 법선VertexElementUV: 텍스처 좌표(하나 이상의 UV 채널)VertexElementVertexColor: 정점당 색상 데이터MappingMode: 요소 데이터가 폴리곤에 매핑되는 방식을 제어합니다ByControlPoint,ByPolygonVertex, 등)ReferenceMode: 인덱싱 전략을 제어합니다 (Direct,IndexToDirect)VertexElementType: 정점 요소의 의미를 식별합니다TextureMapping: 텍스처 채널 열거
로드된 씬에서 메시 데이터를 읽는 중:
import { Scene, Mesh, VertexElementType } from '@aspose/3d';
const scene = new Scene();
scene.open('model.stl');
for (const node of scene.rootNode.childNodes) {
if (node.entity instanceof Mesh) {
const mesh = node.entity as Mesh;
console.log(`Mesh "${node.name}": ${mesh.controlPoints.length} vertices, ${mesh.polygonCount} polygons`);
const normals = mesh.getElement(VertexElementType.NORMAL);
if (normals) {
console.log(` Normal mapping: ${normals.mappingMode}`);
}
}
}Material System
Aspose.3D FOSS for TypeScript는 레거시 Phong 셰이딩부터 물리 기반 렌더링까지 전체 범위를 포괄하는 세 가지 재질 유형을 지원합니다:
LambertMaterial: 확산 색상 및 주변 색상; 간단한 OBJ/DAE 재질에 매핑됩니다PhongMaterial: 스페큘러 색상, 광택, 방출을 추가합니다; 기본 OBJ 재질 유형PbrMaterial: 물리 기반 거칠기/금속 모델; glTF 2.0 가져오기 및 내보내기에 사용됩니다
로드된 OBJ 씬에서 재질을 읽는 중:
import { Scene, PhongMaterial, LambertMaterial } 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) {
for (const mat of node.materials) {
if (mat instanceof PhongMaterial) {
const phong = mat as PhongMaterial;
console.log(` Phong: diffuse=${JSON.stringify(phong.diffuseColor)}, shininess=${phong.shininess}`);
} else if (mat instanceof LambertMaterial) {
console.log(` Lambert: diffuse=${JSON.stringify((mat as LambertMaterial).diffuseColor)}`);
}
}
}glTF 씬을 구축할 때 PBR 재질을 적용하는 중:
import { Scene, Node, PbrMaterial } from '@aspose/3d';
import { GltfSaveOptions, GltfFormat } from '@aspose/3d/formats/gltf';
const scene = new Scene();
const node = scene.rootNode.createChildNode('sphere');
const mat = new PbrMaterial();
mat.albedo = new Vector3(0.8, 0.2, 0.2); // albedo starts null, must assign
mat.metallicFactor = 0.0;
mat.roughnessFactor = 0.5;
node.material = mat;
const opts = new GltfSaveOptions();
opts.binaryMode = false;
scene.save('output.gltf', GltfFormat.getInstance(), opts);수학 유틸리티
이 라이브러리는 완전한 3D 수학 타입 세트를 제공하며, 모두 완전하게 타입이 지정되어 있습니다:
Vector3: 3요소 벡터; 지원add,subtract,scale,dot,cross,normalize,lengthVector4: 동차 좌표용 4요소 벡터Matrix4: 4×4 변환 행렬과multiply,invert,transpose,decomposeQuaternion: 회전 쿼터니언과fromEulerAngles,toEulerAngles,slerp,normalizeBoundingBox: 축 정렬 경계 상자와min,max,center,size,mergeFVector3: 단정밀도 변형Vector3정점 요소 데이터에 사용됨
메쉬 정점으로부터 경계 상자를 계산하기:
import { Scene, Mesh, Vector3, BoundingBox } from '@aspose/3d';
const scene = new Scene();
scene.open('model.obj');
let box = new BoundingBox();
for (const node of scene.rootNode.childNodes) {
if (node.entity instanceof Mesh) {
for (const pt of (node.entity as Mesh).controlPoints) {
box.merge(new Vector3(pt.x, pt.y, pt.z));
}
}
}
console.log('Center:', box.center);
console.log('Extents:', box.size);Euler 각으로부터 변환 행렬 만들기:
import { Quaternion, Vector3, Matrix4 } from '@aspose/3d';
const rot = Quaternion.fromEulerAngle(0, Math.PI / 4, 0); // 45° around Y
const mat = new Matrix4();
mat.setTRS(new Vector3(0, 0, 0), rot, new Vector3(1, 1, 1));애니메이션 시스템
애니메이션 API는 클립, 노드, 채널 및 키프레임 시퀀스를 모델링합니다:
AnimationClip: 이름이 지정된 애니메이션 노드 컬렉션; 에 의해 접근scene.animationClipsAnimationNode: 클립을 이름으로 씬 노드에 바인딩합니다AnimationChannel: 애니메이션 노드 내의 특정 속성(예: translation X)을 대상으로 합니다KeyFrame: 단일 시간/값 쌍KeyframeSequence: 정렬된 목록KeyFrame: 다음과 같은 객체Interpolation그리고Extrapolation설정Interpolation: 키프레임 보간 모드:Linear,Constant,CubicExtrapolation: 키프레임 범위 전후의 동작:Constant,Cycle,Mirror
로드된 씬에서 애니메이션 데이터를 읽기:
import { Scene, AnimationClip, KeyframeSequence } from '@aspose/3d';
const scene = new Scene();
scene.open('animated.fbx');
for (const clip of scene.animationClips) {
console.log(`Clip: "${clip.name}"`);
for (const animNode of clip.nodes) {
console.log(` Node: ${animNode.name}`);
for (const channel of animNode.channels) {
const seq: KeyframeSequence = channel.keyframeSequence;
console.log(` Channel "${channel.name}": ${seq.keyFrames.length} keyframes`);
console.log(` Interpolation: ${seq.interpolation}`);
}
}
}스트림 및 버퍼 지원
사용 scene.openFromBuffer() 를 사용하여 메모리 내에서 직접 3D 씬을 로드합니다 Buffer. 이것은 서버리스 함수, 스트리밍 파이프라인, 그리고 디스크에 쓰지 않고 HTTP를 통해 가져온 에셋을 처리할 때 권장되는 패턴입니다.
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
import * as fs from 'fs';
// Load file into memory, then parse from buffer
const buffer: Buffer = fs.readFileSync('model.obj');
const scene = new Scene();
const options = new ObjLoadOptions();
options.enableMaterials = true;
scene.openFromBuffer(buffer, options);
for (const node of scene.rootNode.childNodes) {
if (node.entity) {
console.log(node.name, node.entity.constructor.name);
}
}버퍼에서 로드할 때 바이너리 매직 넘버를 통한 형식 자동 감지가 적용되므로, GLB, STL 바이너리 및 3MF 파일을 형식 매개변수를 지정하지 않아도 인식됩니다.
사용 예시
예제 1: OBJ 로드 및 GLB로 내보내기
이 예제는 재질이 포함된 Wavefront OBJ 파일을 로드한 뒤, 장면을 웹 및 게임 엔진에서 사용하기 적합한 바이너리 glTF (GLB) 파일로 다시 내보냅니다.
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
import { GltfSaveOptions, GltfFormat } from '@aspose/3d/formats/gltf';
function convertObjToGlb(inputPath: string, outputPath: string): void {
const scene = new Scene();
const loadOpts = new ObjLoadOptions();
loadOpts.enableMaterials = true;
loadOpts.flipCoordinateSystem = false;
loadOpts.normalizeNormal = true;
scene.open(inputPath, loadOpts);
// Report what was loaded
for (const node of scene.rootNode.childNodes) {
if (node.entity) {
console.log(`Loaded: ${node.name} (${node.entity.constructor.name})`);
}
}
const saveOpts = new GltfSaveOptions();
saveOpts.binaryMode = true; // write .glb instead of .gltf + .bin
scene.save(outputPath, GltfFormat.getInstance(), saveOpts);
console.log(`Exported GLB to: ${outputPath}`);
}
convertObjToGlb('input.obj', 'output.glb');예제 2: 노멀 검증이 포함된 STL 라운드트립
이 예제는 바이너리 STL 파일을 로드하고, 정점당 노멀 정보를 출력한 뒤, 장면을 ASCII STL로 다시 내보내고 라운드트립을 검증합니다.
import { Scene, Mesh, VertexElementNormal, VertexElementType } from '@aspose/3d';
import { StlLoadOptions, StlSaveOptions } from '@aspose/3d/formats/stl';
const scene = new Scene();
const loadOpts = new StlLoadOptions();
scene.open('model.stl', loadOpts);
let totalPolygons = 0;
for (const node of scene.rootNode.childNodes) {
if (node.entity instanceof Mesh) {
const mesh = node.entity as Mesh;
totalPolygons += mesh.polygonCount;
const normElem = mesh.getElement(VertexElementType.NORMAL) as VertexElementNormal | null;
if (normElem) {
console.log(` Normals: ${normElem.data.length} entries, mapping=${normElem.mappingMode}`);
}
}
}
console.log(`Total polygons: ${totalPolygons}`);
// Re-export as ASCII STL
const saveOpts = new StlSaveOptions();
saveOpts.binaryMode = false; // ASCII output
scene.save('output_ascii.stl', saveOpts);예제 3: 프로그래밍 방식으로 장면을 구축하고 glTF로 저장하기
이 예제는 처음부터 PBR 재질을 사용해 장면을 구성하고, 이를 JSON glTF 파일로 저장합니다.
import { Scene, Mesh, PbrMaterial, Vector4 } from '@aspose/3d';
import { GltfSaveOptions, GltfFormat } from '@aspose/3d/formats/gltf';
const scene = new Scene();
const node = scene.rootNode.createChildNode('floor');
// Build a simple quad mesh (two triangles)
// controlPoints are Vector4 (x, y, z, w) where w=1 for positions
const mesh = new Mesh();
mesh.controlPoints.push(
new Vector4(-1, 0, -1, 1),
new Vector4( 1, 0, -1, 1),
new Vector4( 1, 0, 1, 1),
new Vector4(-1, 0, 1, 1),
);
mesh.createPolygon([0, 1, 2]);
mesh.createPolygon([0, 2, 3]);
node.entity = mesh;
// Apply a PBR material
const mat = new PbrMaterial();
mat.albedo = new Vector3(0.6, 0.6, 0.6); // albedo starts null, must assign
mat.metallicFactor = 0.0;
mat.roughnessFactor = 0.8;
node.material = mat;
// Save as JSON glTF
const opts = new GltfSaveOptions();
opts.binaryMode = false;
scene.save('floor.gltf', GltfFormat.getInstance(), opts);
console.log('Scene written to floor.gltf');팁 및 모범 사례
- 사용
ObjLoadOptions.enableMaterials = true.mtl 파일에서 재질 데이터를 필요로 할 때마다 사용합니다. 이를 사용하지 않으면 각 노드의 재질 목록이 비게 됩니다. - 선호
binaryMode = trueGLB용 웹 또는 게임 엔진용 에셋을 제작할 때 사용합니다. 바이너리 GLB는 단일 독립 파일이며 JSON + .bin 분할보다 브라우저와 엔진에서 더 빠르게 로드됩니다. - 사용
openFromBuffer()서버리스 환경에서 임시 파일 I/O를 피하기 위해 사용합니다. 에셋을 가져와서, 전달하고Buffer직접 전달하고, 출력을 스트림이나 다른 버퍼에 씁니다. - 확인
node.entity캐스팅하기 전에: 모든 노드가 엔터티를 가지고 있는 것은 아닙니다. 항상 …와 함께 보호하십시오instanceof접근하기 전에 확인Mesh특정 속성 예:controlPoints. - 설정
normalizeNormal = true에서ObjLoadOptions소스 OBJ 파일이 신뢰할 수 없는 출처에서 올 경우. 이는 퇴화된 노멀(Normal)이 하위 렌더링 또는 검증 단계로 전파되는 것을 방지합니다. - 유지
strict: truetsconfig.json에: 라이브러리는 다음으로 작성되었습니다noImplicitAny및strictNullChecks.비활성화strict실제 타입 오류를 가리고, 타입이 지정된 API의 가치를 무력화합니다. - 다음으로 순회
childNodes, 인덱스 루프가 아니라: 그childNodes속성은 iterable을 반환합니다; 앞으로의 호환성을 위해 숫자 인덱싱에 의존하지 마세요.
일반적인 문제
| 증상 | 가능한 원인 | 수정 |
|---|---|---|
| OBJ 로드 후 재질 목록이 비어 있음 | enableMaterials 설정되지 않음 | 설정 options.enableMaterials = true |
| GLB 파일에 별도의 .bin 사이드카가 포함되어 있습니다 | binaryMode 기본값으로 false | 설정 opts.binaryMode = true |
| STL 출력에 정점 법선이 누락되었습니다 | STL ASCII 모드가 면당 법선을 생략합니다 | 전환 binaryMode = true 또는 내보내기 전에 법선을 계산합니다 |
node.entity 항상 null | 탐색만 rootNode, 자식은 제외 | 재귀적으로 들어갑니다 node.childNodes |
| TypeScript 오류: 속성이 존재하지 않습니다 | 이전 @types 캐시 | 실행 npm install @aspose/3d 다시; 별도 없음 @types 패키지가 필요합니다 |
openFromBuffer format 오류를 발생시킵니다 | 매직으로부터 Format을 자동 감지할 수 없습니다 | 두 번째 인수로 명시적인 format 옵션 클래스를 전달하세요 |
자주 묻는 질문
이 라이브러리는 네이티브 애드온이나 시스템 패키지가 필요합니까? 아니요. Aspose.3D FOSS for TypeScript는 단일 런타임 의존성이 있습니다: xmldom, 이는 순수 JavaScript이며 npm에 의해 자동으로 설치됩니다. 없습니다 .node 네이티브 애드온이 없으며 설치할 시스템 패키지도 없습니다.
지원되는 Node.js 버전은 무엇입니까? Node.js 18, 20, 22 LTS를 지원합니다. 이 라이브러리는 CommonJS 출력을 목표로 하며 내부적으로 ES2020 언어 기능을 사용합니다.
브라우저 번들(webpack/esbuild)에서 이 라이브러리를 사용할 수 있나요? 이 라이브러리는 Node.js를 목표로 하며 Node.js fs 와 Buffer API를 사용합니다. 브라우저 번들은 공식적으로 지원되지 않습니다. 브라우저에서 사용하려면, 서버 측에서 씬을 로드하고 결과를(예: GLB 형식으로) 클라이언트에 전송하십시오.
다음 사이의 차이점은 무엇입니까 GltfSaveOptions.binaryMode = true 와 false? binaryMode = false 는 .gltf JSON 파일과 별도의 .bin 바이너리 버퍼 사이드카를 생성합니다. binaryMode = true 는 단일 자체 포함형을 생성합니다. .glb 파일. 사용 true 프로덕션 자산 전달을 위해.
디스크에 저장하지 않고 HTTP 응답에서 파일을 로드할 수 있나요? 예. 응답을 ~로 가져옵니다 Buffer (예: 사용 node-fetch 또는 내장된 fetch Node 18+에서), 호출하십시오 scene.openFromBuffer(buffer, options).
FBX 지원이 완전합니까? FBX 읽기 및 쓰기는 씬 계층 구조, 메시 및 기하 데이터, 애니메이션 클립, 그리고 재질에 대해 지원됩니다. 내장된 미디어가 포함된 매우 복잡한 FBX 파일은 부분적인 결과를 생성할 수 있으므로, 사용 중인 특정 에셋 컬렉션으로 테스트하십시오.
이 라이브러리는 TypeScript 4.x를 지원합니까? TypeScript 5.0 이상을 권장합니다. TypeScript 4.7 이상도 실제로 작동하지만, 이 라이브러리는 5.0 이상을 기준으로 테스트 및 작성되었습니다.
API 레퍼런스 요약
| 클래스 | 모듈 | 목적 |
|---|---|---|
Scene | @aspose/3d | 최상위 씬 컨테이너; open(), openFromBuffer(), save(), rootNode, animationClips |
Node | @aspose/3d | 씬 그래프 노드; childNodes, entity, transform, materials, createChildNode() |
Entity | @aspose/3d | 씬에 부착 가능한 객체를 위한 기본 클래스 |
SceneObject | @aspose/3d | 다음이 공유하는 기본 클래스 Node 및 Entity |
A3DObject | @aspose/3d | 다음과 함께하는 루트 기본 name 및 속성 가방 |
Transform | @aspose/3d | 로컬 변환, 회전 및 스케일 |
Mesh | @aspose/3d | 폴리곤 메시; controlPoints, polygonCount, createPolygon(), 정점 요소 |
Geometry | @aspose/3d | 지오메트리 유형에 대한 기본 클래스 |
Camera | @aspose/3d | 시야각 및 투영 설정이 포함된 카메라 엔터티 |
Light | @aspose/3d | 조명 엔터티(포인트, 방향성, 스팟) |
LambertMaterial | @aspose/3d | 디퓨즈 + 앰비언트 셰이딩 모델 |
PhongMaterial | @aspose/3d | 스페큘러와 방사성을 포함한 Phong 셰이딩 |
PbrMaterial | @aspose/3d | glTF용 물리 기반 거칠기/금속성 모델 |
Vector3 | @aspose/3d | 3-component double-precision vector |
Vector4 | @aspose/3d | 4-component vector for homogeneous math |
Matrix4 | @aspose/3d | 4×4 transformation matrix |
Quaternion | @aspose/3d | 회전 쿼터니언 |
BoundingBox | @aspose/3d | 축 정렬 경계 상자 |
FVector3 | @aspose/3d | 단정밀도 변형 Vector3 |
VertexElementNormal | @aspose/3d | 정점당 또는 폴리곤-정점당 노멀 |
VertexElementUV | @aspose/3d | 텍스처 좌표 정점 요소 |
VertexElementVertexColor | @aspose/3d | 정점당 색상 정점 요소 |
MappingMode | @aspose/3d | 열거형: CONTROL_POINT, POLYGON_VERTEX, POLYGON, ALL_SAME |
ReferenceMode | @aspose/3d | 열거형: Direct, IndexToDirect |
AnimationClip | @aspose/3d | 명명된 애니메이션; 포함 AnimationNode 목록 |
AnimationNode | @aspose/3d | 클립을 씬 노드에 바인드합니다; 포함 AnimationChannel 목록 |
AnimationChannel | @aspose/3d | 속성을 대상으로 합니다; 보유 KeyframeSequence |
KeyFrame | @aspose/3d | 단일 시간/값 키프레임 쌍 |
KeyframeSequence | @aspose/3d | 보간 및 외삽이 포함된 정렬된 키프레임 목록 |
Interpolation | @aspose/3d | Enum: Linear, Constant, Cubic |
Extrapolation | @aspose/3d | Enum: Constant, Cycle, Mirror |
ObjLoadOptions | @aspose/3d/formats/obj | OBJ 가져오기 옵션: enableMaterials, flipCoordinateSystem, scale, normalizeNormal |
GltfSaveOptions | @aspose/3d/formats/gltf | glTF/GLB 내보내기 옵션: binaryMode |
GltfFormat | @aspose/3d/formats/gltf | glTF/GLB용 포맷 인스턴스; 전달 대상 scene.save() |
StlLoadOptions | @aspose/3d/formats/stl | STL 가져오기 옵션 |
StlSaveOptions | @aspose/3d/formats/stl | STL 내보내기 옵션: binaryMode |
StlImporter | @aspose/3d/formats/stl | 저수준 STL 리더 |
StlExporter | @aspose/3d/formats/stl | 저수준 STL 라이터 |