Kaip ištaisyti 3D modelio klaidas TypeScript kalboje

Kaip ištaisyti 3D modelio klaidas TypeScript kalboje

Šiame vadove aptariamos dažniausiai pasitaikančios klaidos naudojant @aspose/3d TypeScript ir Node.js, pateikiant praktinius sprendimus kiekvienai iš jų.

Ž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, iš naujo įdiekite:

npm install @aspose/3d

Žingsnis 2: Ištaisyti modulio rezoliucijos klaidas

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

Sub‑kelių importavimui reikalingi Node.js 12.7+ paketų eksportai. 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: Derinti 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}`);

Bendros priežastys:

  1. Neteisingi formato parametrai: OBJ atveju visada perduokite new ObjLoadOptions(). Naudojant bendruosius parametrus gali būti užkirstas kelias formato aptikimui.

  2. Neteisingas failo kelias: 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 koordinatų sistemos problemas

Modeliai gali būti rodomi pasukę, veidrodžiuoti arba neteisingai mastelio pakeisti dėl koordinatės sistemos skirtumų tarp formatų.

Dešinės rankos vs kairės 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, kurių dydis didesnis nei 100 MB, padidinkite Node.js krūvos dydį:

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

Arba nustatykite jį 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 didelio atminties naudojimo problemų.


Bendras klaidų žinynas

KlaidaTikėtina priežastisSprendimas
Cannot find module '@aspose/3d/formats/obj'Modulio rezoliucijos konfigūracijaNustatykite moduleResolution: node16 tsconfig
scene.rootNode.childNodes yra tuščiasNeteisingi parametrai arba failas nerastasPatikrinkite failo kelią; perduokite teisingą *LoadOptions
Geometrija atrodo veidrodinė/apverstaKoordinačių sistemos nesutapimasNustatykite flipCoordinateSystem = true
Geometrija atrodo neteisingai mastelioVienetų skirtumas tarp formatųNustatykite scale įkėlimo parinktyse
ENOMEM arba procesas nutrauktasNeužtenka atminties dideliam failuiPadidinkite --max-old-space-size
TypeScript tipo klaida ant node.entityBendras objekto tipasNaudokite instanceof Mesh apsaugą

Dažnai užduodami klausimai

Kaip pranešti apie analizės klaidą?

Atidarykite problemos pranešimą GitHub saugykloje su formato pavadinimu, minimaliai atkuriamu failu ir tikslia klaidos žinute.

Kodėl kai kurie tinklai turi nulinį valdymo taškų skaičių?

Kai kurios OBJ grupės apibrėžia tik tekstūros koordinates arba normalius be pozicijos duomenų. Patikrinkite mesh.controlPoints.length > 0 prieš apdorojant.

Biblioteka tyliai ignoruoja analizės klaidas. Kaip jas aptikti?

Įdėkite scene.open() į try/catch bloką. Jei failas yra neteisingai suformuotas, 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ų