TypeScript에서 3D 모델 오류를 수정하는 방법
이 가이드는 TypeScript 및 Node.js에서 @aspose/3d를 사용할 때 가장 흔한 오류를 다루며, 각 오류에 대한 실용적인 해결 방법을 제공합니다.
단계별 가이드
단계 1: 설치 및 버전 확인
지원되는 Node.js 버전(18, 20 또는 22) 중 하나를 사용하고 있으며 패키지가 설치되어 있는지 확인하십시오:
node --version # Must be v18 or later
npm list @aspose/3d # Should show the installed version패키지를 찾을 수 없으면 재설치하십시오:
npm install @aspose/3d2단계: 모듈 해상도 오류 수정
오류: Cannot find module '@aspose/3d/formats/obj'
서브 경로 가져오기는 Node.js 12.7+ 패키지 내보내기를 필요로 합니다. TypeScript에서는 올바른 모듈 해석을 설정하십시오:
// tsconfig.json
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"moduleResolution": "node16",
"strict": true
}
}ESM 프로젝트의 경우 "module": "ES2022"와 "moduleResolution": "bundler"를 사용하십시오.
3단계: 로드 후 빈 씬 디버그
scene.rootNode.childNodes이 scene.open() 이후에 비어 있는 경우:
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
scene.open('model.obj', new ObjLoadOptions());
console.log(`Child nodes: ${scene.rootNode.childNodes.length}`);일반적인 원인:
잘못된 형식 옵션: OBJ의 경우 항상
new ObjLoadOptions()을 전달하십시오. 일반 옵션을 사용하면 형식 감지를 방지할 수 있습니다.파일 경로가 잘못되었습니다: 파일을 찾을 수 없을 경우 라이브러리가 조용히 빈 씬을 로드합니다:
import * as fs from 'fs';
const filePath = 'model.obj';
if (!fs.existsSync(filePath)) {
throw new Error(`File not found: ${filePath}`);
}
const scene = new Scene();
scene.open(filePath, new ObjLoadOptions());- OBJ 파일이 비표준 줄 끝을 사용함: 텍스트 편집기로 열어 파일이 유효한지 확인하십시오.
단계 4: 좌표계 문제 해결
모델이 형식 간 좌표계 차이로 인해 회전되거나, 반사되거나, 잘못 스케일링될 수 있습니다.
오른손 vs 왼손, Y-up vs Z-up:
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const options = new ObjLoadOptions();
options.flipCoordinateSystem = true; // Swap Y and Z axes
const scene = new Scene();
scene.open('model.obj', options);스케일 문제 (예: STL은 밀리미터, glTF는 미터):
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const options = new ObjLoadOptions();
options.scale = 0.001; // Convert millimeters to meters
const scene = new Scene();
scene.open('model.obj', options);5단계: 대용량 파일의 메모리 문제 처리
파일 크기가 100 MB를 초과하는 경우, Node.js 힙 크기를 늘리세요:
node --max-old-space-size=4096 convert.js또는 package.json에 설정하십시오:
{
"scripts": {
"convert": "node --max-old-space-size=4096 dist/convert.js"
}
}대용량 파일을 한 번에 하나씩 처리하여 병렬 처리로 인한 메모리 피크 문제를 방지하십시오.
공통 오류 참조
| 오류 | 가능한 원인 | 해결 방법 |
|---|---|---|
Cannot find module '@aspose/3d/formats/obj' | 모듈 해석 구성 | tsconfig에 moduleResolution: node16 설정 |
scene.rootNode.childNodes 비어 있음 | 옵션이 잘못되었거나 파일을 찾을 수 없음 | 파일 경로 확인; 올바른 *LoadOptions 전달 |
| Geometry appears mirrored/flipped | 좌표계 불일치 | flipCoordinateSystem = true 설정 |
| Geometry appears scaled incorrectly | 형식 간 단위 차이 | 로드 옵션에 scale 설정 |
ENOMEM 또는 프로세스 종료 | 대용량 파일에 메모리 부족 | --max-old-space-size 증가 |
TypeScript type error on node.entity | 엔티티 타입이 넓음 | instanceof Mesh 가드 사용 |
자주 묻는 질문
파싱 버그를 어떻게 보고하나요?
형식 이름, 최소 재현 파일 및 정확한 오류 메시지를 포함하여 GitHub 저장소에 이슈를 열어 주세요.
왜 일부 메시는 제어점이 0개인가요?
일부 OBJ 그룹은 위치 데이터 없이 텍스처 좌표 또는 법선만 정의합니다. 처리하기 전에 mesh.controlPoints.length > 0을 확인하십시오.
라이브러리가 구문 오류를 조용히 무시합니다. 어떻게 감지할 수 있나요?
scene.open()을 try/catch 블록에 넣으세요. 파일이 손상된 경우, 라이브러리가 예외를 발생시키거나 부분 씬을 로드할 수 있습니다:
try {
scene.open('model.obj', new ObjLoadOptions());
} catch (err) {
console.error('Failed to load:', err);
}