TypeScript에서 3D 모델 오류를 해결하는 방법
이 가이드는 사용 시 가장 흔한 오류들을 다룹니다 @aspose/3d TypeScript 및 Node.js용으로, 각 오류에 대한 실용적인 해결책을 제공합니다.
단계별 가이드
단계 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/3d단계 2: 모듈 해석 오류 수정
오류: 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-업 vs Z-업:
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' | 모듈 해석 구성 | 설정 moduleResolution: node16 tsconfig에서 |
scene.rootNode.childNodes 비어 있습니다 | 잘못된 옵션이거나 파일을 찾을 수 없습니다 | 파일 경로를 확인하십시오; 올바르게 전달하십시오 *LoadOptions |
| 기하학이 뒤집힌 것처럼 보입니다 | 좌표계가 일치하지 않습니다 | 설정 flipCoordinateSystem = true |
| 기하학이 잘못 스케일된 것처럼 보입니다 | 포맷 간 단위 차이 | 설정 scale 로드 옵션에서 |
ENOMEM 또는 프로세스가 종료되었습니다 | 대용량 파일에 메모리가 부족합니다 | 증가 --max-old-space-size |
TypeScript 타입 오류 발생 위치 node.entity | 광범위한 엔터티 유형 | 사용 instanceof Mesh guard |
자주 묻는 질문
파싱 버그는 어떻게 보고하나요?
다음에 이슈를 열기 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);
}