특징 및 기능
Aspose.3D FOSS for TypeScript는 로드, 구성 및 3D 씬을 내보내기 위한 MIT 라이선스 Node.js 라이브러리입니다. 완전한 TypeScript 타입 정의와 단일 런타임 종속성 (xmldom), 그리고 6가지 주요 3D 파일 형식을 지원합니다. 이 페이지는 모든 기능 영역에 대한 주요 참고 자료이며 각 영역에 대한 실행 가능한 TypeScript 코드 예제를 포함합니다.
설치 및 설정
단일 명령어로 npm에서 패키지를 설치합니다:
asposefoss/3d is not yet published — build from source until it ships. See the project README for build instructions.이 패키지는 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 라이터 |