Hoe 3D-modelfouten op te lossen in TypeScript

Hoe 3D-modelfouten op te lossen in TypeScript

Deze gids behandelt de meest voorkomende fouten bij het gebruik van @aspose/3d voor TypeScript en Node.js, met praktische oplossingen voor elk.

Stapsgewijze gids

Stap 1: Controleer installatie en versies

Zorg ervoor dat je een ondersteunde Node.js-versie (18, 20 of 22) gebruikt en dat het pakket geïnstalleerd is:

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

Als het pakket niet wordt gevonden, installeer het dan opnieuw:

npm install @aspose/3d

Stap 2: Los module-resolutiefouten op

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

Sub‑pad‑imports vereisen Node.js 12.7+ package‑exports. Stel in TypeScript de juiste module‑resolutie in:

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

Voor ESM-projecten, gebruik "module": "ES2022" en "moduleResolution": "bundler".


Stap 3: Debug een lege scène na het laden

Als scene.rootNode.childNodes leeg is na 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}`);

Veelvoorkomende oorzaken:

  1. Verkeerde formaatopties: voor OBJ, altijd doorgeven new ObjLoadOptions(). Het gebruik van generieke opties kan de formatdetectie voorkomen.
  2. Bestandspad is onjuist: de bibliotheek laadt stilzwijgend een lege scène als het bestand niet wordt gevonden:
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-bestand gebruikt niet-standaard regeleinden: open in een teksteditor en zorg ervoor dat het bestand geldig is.

Stap 4: Coördinatensysteemproblemen oplossen

Modellen kunnen gedraaid, gespiegeld of onjuist geschaald lijken vanwege verschillen in coördinatensystemen tussen formaten.

Rechterhand vs linkerhand, Y-omhoog vs Z-omhoog:

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

Schaalproblemen (bijv. STL in millimeters vs glTF in meters):

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

Stap 5: Geheugenproblemen met grote bestanden aanpakken

Voor bestanden groter dan 100 MB, vergroot de Node.js-heapgrootte:

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

Of stel het in package.json:

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

Verwerk grote bestanden één voor één in plaats van parallel om piekgeheugenproblemen te voorkomen.


Veelvoorkomende foutreferentie

FoutWaarschijnlijke oorzaakOplossing
Cannot find module '@aspose/3d/formats/obj'Module‑resolutieconfiguratieInstellen moduleResolution: node16 in tsconfig
scene.rootNode.childNodes is leegVerkeerde opties of bestand niet gevondenControleer het bestandspad; geef het juiste door *LoadOptions
Geometrie lijkt gespiegeld/omgeklaptCoördinatensysteem komt niet overeenInstellen flipCoordinateSystem = true
Geometrie lijkt onjuist geschaaldEenheidsverschil tussen formatenInstellen scale in laadopties
ENOMEM of proces beëindigdOnvoldoende geheugen voor groot bestandVerhogen --max-old-space-size
TypeScript typefout op node.entityAlgemeen entiteitstypeGebruik instanceof Mesh guard

Veelgestelde vragen

Hoe rapporteer ik een parsefout?

Open een issue op de GitHub-repository met de bestandsnaam, een minimaal reproduceerbaar bestand en de exacte foutmelding.

Waarom hebben sommige meshes nul controlepunten?

Sommige OBJ-groepen definiëren alleen textuurcoördinaten of normaalvectoren zonder positiedata. Controleer mesh.controlPoints.length > 0 voordat u verwerkt.

De bibliotheek negeert parsefouten stilzwijgend. Hoe kan ik ze detecteren?

Omwikkel scene.open() in een try/catch-blok. Als het bestand misvormd is, kan de bibliotheek een uitzondering werpen of een gedeeltelijke scène laden:

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

Zie ook

 Nederlands