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-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"
}
}ピーク時のメモリ問題を回避するため、複数同時に処理せず、ファイルを1つずつ順に処理してください。.
一般的なエラーリファレンス
| エラー | 考えられる原因 | 修正方法 |
|---|---|---|
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 ガード |
よくある質問
パースバグはどう報告すればよいですか??
以下で issue を作成する 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);
}