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 versionAk balík nie je nájdený, preinštalujte ho:
npm install @aspose/3dKrok 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:
- 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. - 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());- 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.jsAlebo 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
| Chyba | Pravdepodobná príčina | Oprava |
|---|---|---|
Cannot find module '@aspose/3d/formats/obj' | Konfigurácia riešenia modulov | Nastaviť moduleResolution: node16 v tsconfig |
scene.rootNode.childNodes je prázdny | Nesprá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ému | Nastaviť flipCoordinateSystem = true |
| Geometria sa javí nesprávne škálovaná | Rozdiel jednotiek medzi formátmi | Nastaviť scale v možnostiach načítania |
ENOMEM alebo proces ukončený | Nedostatok pamäte pre veľký súbor | Zvýšiť --max-old-space-size |
Chyba typu TypeScript na node.entity | Široký typ entity | Použ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);
}