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 handleiding

Stap 1: Controleer installatie en versies

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

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

Als het pakket niet wordt gevonden, installeer het opnieuw:

npm install @aspose/3d

Stap 2: Module‑resolutiefouten oplossen

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

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

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

Gebruik "module": "ES2022" en "moduleResolution": "bundler" voor ESM‑projecten.


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 formatopties: voor OBJ, altijd new ObjLoadOptions() doorgeven. Het gebruik van generieke opties kan 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 file 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 verschijnen vanwege verschillen in coördinatensystemen tussen formaten.

Rechterhand vs linkerhand, 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);

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: Omgaan met geheugenproblemen bij grote bestanden

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.


Algemene foutreferentie

FoutWaarschijnlijke oorzaakOplossing
Cannot find module '@aspose/3d/formats/obj'Module‑resolutieconfiguratieStel moduleResolution: node16 in tsconfig
scene.rootNode.childNodes is leegVerkeerde opties of bestand niet gevondenControleer het bestandspad; geef de juiste *LoadOptions door
Geometrie lijkt gespiegeld/omgekeerdCoördinatensysteem komt niet overeenStel flipCoordinateSystem = true in
Geometrie lijkt onjuist geschaaldEenheidsverschil tussen formatenStel scale in laadopties
ENOMEM of proces beëindigdOnvoldoende geheugen voor groot bestandVerhoog --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 formatnaam, een minimaal reproduceerbaar bestand en het exacte foutbericht.

Waarom hebben sommige meshes nul controlepunten?

Sommige OBJ-groepen definiëren alleen textuurcoördinaten of normalen zonder positiedata. Controleer mesh.controlPoints.length > 0 vóór het verwerken.

De bibliotheek negeert stilzwijgend parse‑fouten. Hoe kan ik ze detecteren?

Wrap 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