Kako popraviti greške 3D modela u TypeScript-u
Ovaj vodič pokriva najčešće greške pri korišćenju @aspose/3d za TypeScript i Node.js, sa praktičnim rešenjima za svaku.
Vodič korak po korak
Korak 1: Proverite instalaciju i verzije
Uverite se da koristite podržanu verziju Node.js-a (18, 20 ili 22) i da je paket instaliran:
node --version # Must be v18 or later
npm list @aspose/3d # Should show the installed versionAko paket nije pronađen, reinstalirajte:
npm install @aspose/3dKorak 2: Popravite greške u razrešavanju modula
Greška: Cannot find module '@aspose/3d/formats/obj'
Uvozi pod‑putanja zahtevaju izvoz paketa iz Node.js 12.7+. U TypeScript‑u, postavite ispravno razrešavanje modula:
// tsconfig.json
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"moduleResolution": "node16",
"strict": true
}
}Za ESM projekte, koristite "module": "ES2022" i "moduleResolution": "bundler".
Korak 3: Dijagnostikujte praznu scenu nakon učitavanja
Ako scene.rootNode.childNodes je prazno nakon 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}`);Uobičajeni uzroci:
- Pogrešne opcije formata: za OBJ, uvek prosledite
new ObjLoadOptions(). Korišćenje generičkih opcija može sprečiti otkrivanje formata. - Putanja do fajla je pogrešna: biblioteka tiho učitava praznu scenu ako fajl nije pronađen:
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 fajl koristi nestandardne završetke linija: otvorite u tekstualnom editoru i uverite se da je fajl validan.
Korak 4: Ispravite probleme sa koordinatnim sistemom
Modeli se mogu pojaviti rotirani, zrcaljeni ili nepravilno skalirani zbog razlika u koordinatnim sistemima između formata.
Desna ruka naspram leve ruke, Y-gore naspram Z-gore:
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);Problemi sa skaliranjem (npr. STL u milimetrima naspram glTF-a u metrima):
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);Korak 5: Rešavanje problema sa memorijom kod velikih fajlova
Za fajlove veće od 100 MB, povećajte veličinu Node.js heap memorije:
node --max-old-space-size=4096 convert.jsIli postavite to u package.json:
{
"scripts": {
"convert": "node --max-old-space-size=4096 dist/convert.js"
}
}Obradjujte velike fajlove jedan po jedan, a ne paralelno, kako biste izbegli probleme sa vršnim opterećenjem memorije.
Uobičajena referenca grešaka
| Greška | Verovatni uzrok | Popravka |
|---|---|---|
Cannot find module '@aspose/3d/formats/obj' | Konfiguracija rezolucije modula | Postavi moduleResolution: node16 u tsconfig |
scene.rootNode.childNodes je prazno | Pogrešne opcije ili fajl nije pronađen | Proverite putanju fajla; prosledite ispravnu *LoadOptions |
| Geometrija se pojavljuje ogledano/okrenuto | Neslaganje koordinatnog sistema | Postavi flipCoordinateSystem = true |
| Geometrija se čini pogrešno skalirana | Razlika u jedinicama između formata | Postavi scale u opcijama učitavanja |
ENOMEM ili je proces prekinut | Nedovoljno memorije za veliku datoteku | Povećaj --max-old-space-size |
Greška tipa u TypeScript-u na node.entity | Širok tip entiteta | Koristi instanceof Mesh čuvanje |
Često postavljana pitanja
Kako da prijavim grešku u parsiranju?
Otvorite problem na GitHub repozitorijum sa imenom formata, minimalnim reproduktivnim fajlom i tačnom porukom o grešci.
Zašto neki mrežni modeli (meshes) imaju nula kontrolnih tačaka?
Neke OBJ grupe definišu samo koordinate teksture ili normale bez podataka o poziciji. Proverite mesh.controlPoints.length > 0 pre obrade.
Biblioteka tiho ignoriše greške pri parsiranju. Kako da ih otkrijem?
Uokvirite scene.open() u try/catch bloku. Ako je fajl oštećen, biblioteka može baciti izuzetak ili učitati delimičnu scenu:
try {
scene.open('model.obj', new ObjLoadOptions());
} catch (err) {
console.error('Failed to load:', err);
}