Kako popraviti pogreške 3D modela u TypeScriptu

Kako popraviti pogreške 3D modela u TypeScriptu

Ovaj vodič pokriva najčešće greške pri korištenju @aspose/3d za TypeScript i Node.js, s praktičnim rješenjima za svaku.

Vodič korak po korak

Korak 1: Provjerite instalaciju i verzije

Provjerite jeste li na podržanoj Node.js verziji (18, 20 ili 22) i da je paket instaliran:

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

Ako paket nije pronađen, ponovno instalirajte:

npm install @aspose/3d

Korak 2: Ispravi pogreške razrješavanja modula

Greška: Cannot find module '@aspose/3d/formats/obj'

Uvoz podputanja zahtijeva izvoz paketa Node.js 12.7+. U TypeScriptu postavite ispravno razrješavanje modula:

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

Za ESM projekte, koristite "module": "ES2022" i "moduleResolution": "bundler".


Korak 3: Debug prazne scene nakon učitavanja

Ako je scene.rootNode.childNodes prazan 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:

  1. Pogrešne opcije formata: za OBJ, uvijek proslijedite new ObjLoadOptions(). Korištenje generičkih opcija može spriječiti otkrivanje formata.

  2. Put datoteke je pogrešan: biblioteka tiho učitava praznu scenu ako datoteka nije pronađena:

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 datoteka koristi nestandardne završetke redaka: otvorite je u tekstualnom editoru i provjerite je li datoteka valjana.

Korak 4: Ispravi probleme koordinatnog sustava

Modeli se mogu pojaviti rotirani, zrcaljeni ili nepravilno skalirani zbog razlika u koordinatnim sustavima između formata.

Desna ruka vs lijeva ruka, Y‑gore vs 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 s mjerama (npr. STL u milimetrima vs glTF 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: Rješavanje problema s memorijom kod velikih datoteka

Za datoteke veće od 100 MB, povećajte veličinu heap memorije Node.js‑a:

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

Ili ga postavite u package.json:

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

Obradite velike datoteke po jednu, a ne paralelno, kako biste izbjegli probleme s vršnom memorijom.


Uobičajena referenca pogreške

GreškaVjerojatni uzrokRješenje
Cannot find module '@aspose/3d/formats/obj'Konfiguracija rezolucije modulaPostavite moduleResolution: node16 u tsconfig
scene.rootNode.childNodes je prazanPogrešne opcije ili datoteka nije pronađenaProvjerite putanju datoteke; proslijedite ispravan *LoadOptions
Geometrija se prikazuje zrcaljeno/okrenutoNeusklađenost koordinatnog sustavaPostavite flipCoordinateSystem = true
Geometrija je nepravilno skaliranaRazlika jedinica između formataPostavite scale u opcijama učitavanja
ENOMEM ili je proces prekinutNedovoljno memorije za veliku datotekuPovećajte --max-old-space-size
TypeScript greška tipa na node.entityŠiroki tip entitetaKoristite zaštitu instanceof Mesh

Često postavljana pitanja

Kako mogu prijaviti grešku u parsiranju?

Otvorite issue na GitHub repository s nazivom formata, minimalnom reproduktivnom datotekom i točnom porukom o pogrešci.

Zašto neke mreže imaju nula kontrolnih točaka?

Neke OBJ grupe definiraju samo koordinate teksture ili normale bez podataka o položaju. Provjerite mesh.controlPoints.length > 0 prije obrade.

Biblioteka tiho ignorira pogreške parsiranja. Kako ih otkriti?

Uokvirite scene.open() u try/catch blok. Ako je datoteka oštećena, biblioteka može baciti iznimku ili učitati djelomičnu scenu:

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

Vidi također

 Hrvatski