Sådan løser du 3D-modelfejl i TypeScript

Sådan løser du 3D-modelfejl i TypeScript

Denne guide dækker de mest almindelige fejl, når du bruger @aspose/3d for TypeScript og Node.js, med praktiske rettelser for hver.

Trin-for-trin guide

Trin 1: Verificer installation og versioner

Sørg for, at du bruger en understøttet Node.js-version (18, 20 eller 22), og at pakken er installeret:

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

Hvis pakken ikke findes, geninstaller:

npm install @aspose/3d

Trin 2: Løs modulopløsningsfejl

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

Undermappe-importer kræver Node.js 12.7+ pakkeeksport. I TypeScript skal du indstille den korrekte modulopløsning:

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

For ESM-projekter, brug "module": "ES2022" og "moduleResolution": "bundler".


Trin 3: Fejlsøg en tom scene efter indlæsning

Hvis scene.rootNode.childNodes er 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}`);

Almindelige årsager:

  1. Forkerte formatindstillinger: for OBJ, skal du altid videregive new ObjLoadOptions(). Brug af generiske indstillinger kan forhindre formatgenkendelse.
  2. Filstien er forkert: biblioteket indlæser stille en tom scene, hvis filen ikke findes:
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 bruger ikke-standard linjeafslutninger: åbn i en teksteditor og sørg for, at filen er gyldig.

Trin 4: Løs koordinatsystemproblemer

Modeller kan fremstå roteret, spejlet eller skaleret forkert på grund af forskelle i koordinatsystemet mellem formater.

Højrehånd vs venstrehånd, Y-op vs Z-op:

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

Skaleringsproblemer (fx 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);

Trin 5: Håndter hukommelsesproblemer med store filer

For filer større end 100 MB, øg Node.js heap-størrelsen:

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

Eller indstil det i package.json:

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

Behandl store filer én ad gangen i stedet for parallelt for at undgå spidshukommelsesproblemer.


Almindelig fejlreference

FejlSandsynlig årsagLøsning
Cannot find module '@aspose/3d/formats/obj'ModulopløsningskonfigurationIndstil moduleResolution: node16 i tsconfig
scene.rootNode.childNodes er tomForkerte indstillinger eller fil ikke fundetTjek filsti; angiv korrekt *LoadOptions
Geometri ser spejlet/omvendt udKoordinatsystemet stemmer ikkeSæt flipCoordinateSystem = true
Geometri ser skaleret forkert udEnhedsforskel mellem formaterSæt scale i indlæsningsindstillinger
ENOMEM eller processen blev dræbtUtilstrækkelig hukommelse til stor filØg --max-old-space-size
TypeScript-typfejl på node.entityBred entitetstypeBrug instanceof Mesh vagt

Ofte stillede spørgsmål

Hvordan rapporterer jeg en parsefejl?

Åbn en issue på GitHub-arkiv med formatnavnet, en minimal reproducerbar fil og den præcise fejlmeddelelse.

Hvorfor har nogle mesh’er nul kontrolpunkter?

Nogle OBJ-grupper definerer kun teksturkoordinater eller normaler uden positionsdata. Tjek mesh.controlPoints.length > 0 før behandling.

Biblioteket ignorerer stille parsefejl. Hvordan kan jeg opdage dem?

Pak ind scene.open() i en try/catch-blok. Hvis filen er fejlbehæftet, kan biblioteket kaste en undtagelse eller indlæse en delvis scene:

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

Se også

 Dansk