Ako opraviť chyby 3D modelov v TypeScript

Ako opraviť chyby 3D modelov v TypeScript

Tento sprievodca pokrýva najčastejšie chyby pri používaní @aspose/3d pre TypeScript a Node.js, s praktickými riešeniami pre každú.

Postupný návod

Krok 1: Overte inštaláciu a verzie

Uistite sa, že používate podporovanú verziu Node.js (18, 20 alebo 22) a balík je nainštalovaný:

node --version          # Must be v18 or later
npm list @aspose/3d     # Should show the installed version

Ak balík nie je nájdený, preinštalujte ho:

npm install @aspose/3d

Krok 2: Opravte chyby riešenia modulov

Chyba: Cannot find module '@aspose/3d/formats/obj'

Importy podcest vyžadujú exporty balíka Node.js 12.7+. V TypeScript nastavte správne riešenie modulov:

// tsconfig.json
{
  "compilerOptions": {
    "target": "ES2020",
    "module": "commonjs",
    "moduleResolution": "node16",
    "strict": true
  }
}

Pre ESM projekty použite "module": "ES2022" a "moduleResolution": "bundler".


Krok 3: Ladenie prázdnej scény po načítaní

Ak scene.rootNode.childNodes je prázdny po 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}`);

Bežné príčiny:

  1. Nesprávne možnosti formátu: pre OBJ vždy odovzdajte new ObjLoadOptions(). Používanie všeobecných možností môže zabrániť detekcii formátu.
  2. Cesta k súboru je nesprávna: knižnica ticho načíta prázdnu scénu, ak súbor nie je nájdený:
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. Súbor OBJ používa neštandardné konce riadkov: otvorte v textovom editore a uistite sa, že súbor je platný.

Krok 4: Opraviť problémy so súradnicovým systémom

Modely sa môžu javiť otočené, zrkadlové alebo nesprávne škálované kvôli rozdielom v súradnicových systémoch medzi formátmi.

Pravá ruka vs ľavá ruka, Y nahor vs Z nahor:

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

Problémy so škálovaním (napr. STL v milimetroch vs glTF v metroch):

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

Krok 5: Riešiť problémy s pamäťou pri veľkých súboroch

Pre súbory väčšie ako 100 MB zväčšite veľkosť haldy Node.js:

node --max-old-space-size=4096 convert.js

Alebo nastavte v package.json:

{
  "scripts": {
    "convert": "node --max-old-space-size=4096 dist/convert.js"
  }
}

Spracovávajte veľké súbory po jednom namiesto paralelne, aby ste predišli špičkovým problémom s pamäťou.


Bežná referencia chýb

ChybaPravdepodobná príčinaOprava
Cannot find module '@aspose/3d/formats/obj'Konfigurácia riešenia modulovNastaviť moduleResolution: node16 v tsconfig
scene.rootNode.childNodes je prázdnyNesprávne možnosti alebo súbor nebol nájdenýSkontrolujte cestu k súboru; odovzdajte správnu *LoadOptions
Geometria sa javí ako zrkadlená/otočenáNesúlad súradnicového systémuNastaviť flipCoordinateSystem = true
Geometria sa javí nesprávne škálovanáRozdiel jednotiek medzi formátmiNastaviť scale v možnostiach načítania
ENOMEM alebo proces ukončenýNedostatok pamäte pre veľký súborZvýšiť --max-old-space-size
Chyba typu TypeScript na node.entityŠiroký typ entityPoužiť instanceof Mesh ochrana

Často kladené otázky

Ako nahlásiť chybu pri parsovaní?

Otvorte problém na repozitár GitHub s názvom formátu, minimálnym reprodukovateľným súborom a presnou chybovou správou.

Prečo niektoré siete (mesh) majú nulový počet kontrolných bodov?

Niektoré OBJ skupiny definujú iba textúrové súradnice alebo normály bez dát o pozícii. Skontrolujte mesh.controlPoints.length > 0 pred spracovaním.

Knižnica ticho ignoruje chyby parsovania. Ako ich môžem detekovať?

Zabaľte scene.open() v bloku try/catch. Ak je súbor poškodený, knižnica môže vyhodiť výnimku alebo načítať čiastočnú scénu:

try {
    scene.open('model.obj', new ObjLoadOptions());
} catch (err) {
    console.error('Failed to load:', err);
}

Pozri tiež

 Slovenčina