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

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

Den här guiden täcker de vanligaste felen när du använder @aspose/3d för TypeScript och Node.js, med praktiska lösningar för varje.

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 fel i modulupplösning

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

Undervägssökningar kräver Node.js 12.7+ paketexport. I TypeScript, ställ in 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 inläsning

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

Steg 4: Åtgärda koordinatsystemproblem

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

Högerhand vs vänsterhand, Y-upp vs Z-upp:

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

Skalningsproblem (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 större än 100 MB, öka Node.js:s heap‑storlek:

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

Eller ange det i package.json:

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

Bearbeta stora filer en i taget istället för parallellt för att undvika toppminnesproblem.


Vanlig felreferens

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

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 parsningsfel. Hur kan jag upptäcka dem?

Omslut scene.open() i ett try/catch‑block. Om filen är felaktig 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