TypeScriptで3Dモデルエラーを修正する方法

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}`);

一般的な原因::

  1. 誤ったフォーマットオプション: OBJ の場合は、常に渡す new ObjLoadOptions(). 汎用オプションを使用すると、フォーマット検出が妨げられる可能性があります。.
  2. ファイルパスが間違っています: ライブラリはファイルが見つからない場合、黙って空のシーンをロードします:
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());
  1. 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);
}

参照

 日本語