Kā novērst 3D modeļa kļūdas TypeScript

Kā novērst 3D modeļa kļūdas TypeScript

Šis ceļvedis aptver visbiežāk sastopamās kļūdas, lietojot @aspose/3d TypeScript un Node.js, ar praktiskiem risinājumiem katram.

Solī pa solim ceļvedis

1. solis: Pārbaudiet instalāciju un versijas

Pārliecinieties, ka izmantojat atbalstītu Node.js versiju (18, 20 vai 22) un pakotne ir instalēta:

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

Ja pakotne nav atrasta, pārinstalējiet:

npm install @aspose/3d

2. solis: Novērsiet moduļu izšķiršanas kļūdas

Kļūda: Cannot find module '@aspose/3d/formats/obj'

Apakšceļu importi pieprasa Node.js 12.7+ pakotņu eksportus. TypeScript iestatiet pareizo moduļu izšķiršanu:

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

ESM projektiem, izmantojiet "module": "ES2022" un "moduleResolution": "bundler".


3. solis: Atkļūdot tukšu skeni pēc ielādes

Ja scene.rootNode.childNodes ir tukšs pēc 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}`);

Biežākie cēloņi:

  1. Kļūdainas formāta iespējas: priekš OBJ, vienmēr nodod new ObjLoadOptions(). Vispārīgu opciju lietošana var novērst formāta noteikšanu.
  2. Faila ceļš ir nepareizs: bibliotēka klusi ielādē tukšu ainu, ja fails nav atrasts:
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 fails izmanto nestandarta rindu beigas: atveriet to teksta redaktorā un pārliecinieties, ka fails ir derīgs.

Solis 4: Novērst koordinātu sistēmas problēmas

Modeļi var izskatīties pagrieztas, spoguļattēlotas vai nepareizi mērogotas koordinātu sistēmas atšķirību dēļ starp formātiem.

Labā roka pret kreiso roku, Y-augšup pret Z-augš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);

Mēroga problēmas (piemēram, STL milimetros pret glTF metros):

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

Solis 5: Risināt atmiņas problēmas ar lieliem failiem

Failiem, kas lielāki par 100 MB, palieliniet Node.js kaudzes (heap) izmēru:

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

Vai arī iestatiet to package.json:

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

Apstrādājiet lielus failus vienu pēc otra, nevis paralēli, lai izvairītos no maksimālās atmiņas problēmām.


Biežāk sastopamo kļūdu atsauce

KļūdaIespējams iemeslsLabojums
Cannot find module '@aspose/3d/formats/obj'Moduļa izšķiršanas konfigurācijaIestatīt moduleResolution: node16 tsconfig
scene.rootNode.childNodes ir tukšsKļūdainas opcijas vai fails nav atrastsPārbaudiet faila ceļu; norādiet pareizo *LoadOptions
Ģeometrija izskatās spoguļota/apgrieztaKoordinātu sistēmu nesaderībaIestatīt flipCoordinateSystem = true
Ģeometrija izskatās nepareizi mērogotaVienību atšķirība starp formātiemIestatīt scale ielādes opcijās
ENOMEM vai process pārtrauktsAtmiņa nepietiekama lielam failamPalielināt --max-old-space-size
TypeScript tipa kļūda uz node.entityPlašs vienuma veidsIzmantot instanceof Mesh sargs

Biežāk uzdotie jautājumi

Kā ziņot par parsēšanas kļūdu?

Atveriet problēmu GitHub repozitorijs ar formāta nosaukumu, minimālu reproducējamu failu un precīzu kļūdas ziņojumu.

Kāpēc dažiem režģiem (mesh) ir nulle kontroles punktu?

Dažas OBJ grupas definē tikai tekstūras koordinātas vai normāles bez pozīcijas datiem. Pārbaudiet mesh.controlPoints.length > 0 pirms apstrādes.

Bibliotēka klusi ignorē parsēšanas kļūdas. Kā es varu tās noteikt?

Ietiniet scene.open() try/catch blokā. Ja fails ir bojāts, bibliotēka var izsaukt izņēmumu vai ielādēt daļēju ainu:

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

Skatīt arī

 Latviešu