Hur man åtgärdar 3D-modellfel i TypeScript

Hur man åtgärdar 3D-modellfel i TypeScript

Denna guide täcker de vanligaste felen när du använder @aspose/3d för TypeScript och Node.js, med praktiska lösningar för var och en.

Steg-för-steg-guide

Steg 1: Verifiera installation och versioner

Se till att du använder en stödjande Node.js-version (18, 20 eller 22) och att paketet är installerat:

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

Om paketet inte hittas, installera om:

npm install @aspose/3d

Steg 2: Åtgärda modulupplösningsfel

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

Undermappimport kräver Node.js 12.7+ paketexport. I TypeScript, ange rätt modulupplösning:

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

För ESM‑projekt, använd "module": "ES2022" och "moduleResolution": "bundler".


Steg 3: Felsök en tom scen efter laddning

Om scene.rootNode.childNodes är tom efter 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}`);

Vanliga orsaker:

  1. Fel formatalternativ: för OBJ, skicka alltid new ObjLoadOptions(). Att använda generiska alternativ kan förhindra formatdetektering.

  2. Filvägen är fel: biblioteket laddar tyst en tom scen om filen inte hittas:

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 file använder icke‑standard radslut: öppna i en textredigerare och säkerställ att filen är giltig.

Steg 4: Åtgärda problem med koordinatsystemet

Modeller kan visas roterade, spegelvända eller felaktigt skalade på grund av skillnader i koordinatsystem mellan format.

Högerhand vs vänsterhand, Y-up vs Z-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);

Skalproblem (t.ex. STL i millimeter vs glTF i meter):

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

Steg 5: Hantera minnesproblem med stora filer

För filer som är större än 100 MB, öka Node.js heap‑storleken:

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

Eller ställ in det i package.json:

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

Bearbeta stora filer en i taget snarare än parallellt för att undvika toppminnesproblem.


Gemensam felreferens

FelTrolig orsakÅtgärd
Cannot find module '@aspose/3d/formats/obj'ModulupplösningskonfigurationStäll in moduleResolution: node16 i tsconfig
scene.rootNode.childNodes är tomFelaktiga alternativ eller filen hittades inteKontrollera filsökvägen; skicka korrekt *LoadOptions
Geometri visas speglad/vändKoordinatsystemet matchar inteStäll in flipCoordinateSystem = true
Geometri visas felaktigt skaladEnhetsskillnad mellan formatStäll in scale i laddningsalternativ
ENOMEM eller processen dödadesOtillräckligt minne för stor filÖka --max-old-space-size
TypeScript-typfel på node.entityBred entitetstypAnvänd instanceof Mesh-skydd

Vanliga frågor

Hur rapporterar jag ett parsningsfel?

Öppna ett ärende på GitHub‑arkivet med formatnamnet, en minimal reproducerbar fil och det exakta felmeddelandet.

Varför har vissa meshar noll kontrollpunkter?

Vissa OBJ-grupper definierar endast texturkoordinater eller normaler utan positionsdata. Kontrollera mesh.controlPoints.length > 0 innan bearbetning.

Biblioteket ignorerar tyst parsefel. Hur upptäcker jag dem?

Placera scene.open() i ett try/catch‑block. Om filen är felaktigt formaterad kan biblioteket kasta ett undantag eller ladda en partiell scen:

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

Se även

 Svenska