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/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.open() の後で scene.rootNode.childNodes が空の場合:
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' | モジュール解決設定 | tsconfig に moduleResolution: node16 を設定 |
scene.rootNode.childNodes は空です | オプションが間違っているか、ファイルが見つかりません | ファイルパスを確認し、正しい *LoadOptions を渡す |
| ジオメトリが鏡像/反転して表示される | 座標系の不一致 | flipCoordinateSystem = true を設定 |
| ジオメトリがスケールが不正確に表示される | フォーマット間の単位差 | ロードオプションで scale を設定 |
ENOMEM またはプロセスが終了した | 大きなファイルに対するメモリ不足 | --max-old-space-size を増やす |
node.entity に対する TypeScript 型エラー | エンティティ型が広すぎる | instanceof Mesh ガードを使用 |
よくある質問
パースバグを報告するにはどうすればよいですか?
フォーマット名、最小限の再現可能なファイル、および正確なエラーメッセージを添えて、GitHub リポジトリで issue を作成してください。
なぜ一部のメッシュは制御点がゼロになるのですか?
一部の OBJ グループは、位置データなしでテクスチャ座標または法線のみを定義します。処理する前に mesh.controlPoints.length > 0 を確認してください。
ライブラリはパースエラーを黙って無視します。どうすればそれらを検出できますか?
scene.open() を try/catch ブロックでラップしてください。ファイルが不正な形式の場合、ライブラリは例外をスローするか、部分的なシーンをロードする可能性があります:
try {
scene.open('model.obj', new ObjLoadOptions());
} catch (err) {
console.error('Failed to load:', err);
}