Kaip ištaisyti 3D modelio klaidas TypeScript

Kaip ištaisyti 3D modelio klaidas TypeScript

Šiame vadove aptariamos dažniausiai pasitaikančios klaidos, kai naudojama @aspose/3d skirta TypeScript ir Node.js, su praktiniais sprendimais kiekvienai.

Žingsnis po žingsnio vadovas

Žingsnis 1: Patikrinkite įdiegimą ir versijas

Įsitikinkite, kad naudojate palaikomą Node.js versiją (18, 20 arba 22) ir paketas yra įdiegtas:

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

Jei paketas nerastas, įdiekite iš naujo:

npm install @aspose/3d

Žingsnis 2: Ištaisykite modulio rezoliucijos klaidas

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

Subkelių importai reikalauja Node.js 12.7+ paketų eksporto. TypeScript kalboje nustatykite teisingą modulio rezoliuciją:

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

ESM projektams naudokite "module": "ES2022" ir "moduleResolution": "bundler".


Žingsnis 3: Derinkite tuščią sceną po įkėlimo

Jei scene.rootNode.childNodes yra tuščias 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}`);

Dažnos priežastys:

  1. Neteisingi formato parametrai: OBJ, visada perduokite new ObjLoadOptions(). Naudojant bendrus parametrus gali būti užkirstas kelias formato aptikimui.
  2. Failo kelias yra neteisingas: biblioteka tyliai įkelia tuščią sceną, jei failas nerastas:
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 failas naudoja nestandartinius eilučių pabaigos ženklus: atidarykite teksto redaktoriuje ir įsitikinkite, kad failas yra galiojantis.

Žingsnis 4: Ištaisyti koordinačių sistemos problemas

Modeliai gali pasirodyti pasukę, veidrodiniai arba neteisingai mastelio dėl koordinačių sistemos skirtumų tarp formatų.

Dešiniosios rankos vs kairiosios rankos, Y‑aukštyje vs Z‑aukštyje:

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

Mastelio problemos (pvz., STL milimetrais vs glTF metrais):

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

Žingsnis 5: Tvarkyti atminties problemas su dideliais failais

Failams, didesniems nei 100 MB, padidinkite Node.js krūvos (heap) dydį:

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

Arba nustatykite tai package.json:

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

Apdorokite didelius failus po vieną, o ne lygiagrečiai, kad išvengtumėte didžiausios atminties problemų.


Bendras klaidų šaltinis

KlaidaTikėtina priežastisPataisa
Cannot find module '@aspose/3d/formats/obj'Modulių sprendimo konfigūracijaNustatyti moduleResolution: node16 tsconfig faile
scene.rootNode.childNodes yra tuščiasNeteisingi parametrai arba failas nerastasPatikrinkite failo kelią; pateikite teisingą *LoadOptions
Geometrija atrodo veidrodinė/apverstaKoordinačių sistemos nesutapimasNustatyti flipCoordinateSystem = true
Geometrija atrodo neteisingai mastelioVienetų skirtumas tarp formatųNustatyti scale įkrovimo parinktyse
ENOMEM arba procesas nutrauktasTrūksta atminties dideliam failuiPadidinti --max-old-space-size
TypeScript tipo klaida ant node.entityBendras objektų tipasNaudoti instanceof Mesh apsauga

Dažniausiai užduodami klausimai

Kaip pranešti apie parsinimo klaidą?

Atidarykite problemą GitHub saugykla su formato pavadinimu, minimaliai atkuriamu failu ir tikslia klaidos žinute.

Kodėl kai kurių tinklų (mesh) kontrolinių taškų nėra?

Kai kurie OBJ grupės apibrėžia tik tekstūros koordinates arba normalės be pozicijos duomenų. Patikrinkite mesh.controlPoints.length > 0 prieš apdorojimą.

Biblioteka tyliai ignoruoja parsinimo klaidas. Kaip jas aptikti?

Apsupkite scene.open() try/catch bloke. Jei failas yra sugadintas, biblioteka gali išmesti išimtį arba įkelti dalinę sceną:

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

Žr. taip pat

 Lietuvių