Hvordan fikse 3D-modellfeil i TypeScript

Hvordan fikse 3D-modellfeil i TypeScript

Denne guiden dekker de mest vanlige feilene når du bruker @aspose/3d for TypeScript og Node.js, med praktiske løsninger for hver.

Steg-for-steg Guide

Steg 1: Verifiser installasjon og versjoner

Sørg for at du bruker en støttet Node.js‑versjon (18, 20 eller 22) og at pakken er installert:

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

Hvis pakken ikke finnes, installer på nytt:

npm install @aspose/3d

Steg 2: Fiks moduloppløsningsfeil

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

Sub‑path‑importer krever Node.js 12.7+ pakke‑eksporter. I TypeScript, sett riktig moduloppløsning:

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

For ESM‑prosjekter, bruk "module": "ES2022" og "moduleResolution": "bundler".


Steg 3: Feilsøk en tom scene etter lasting

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

Vanlige årsaker:

  1. Feil formatalternativer: for OBJ, alltid send new ObjLoadOptions(). Bruk av generiske alternativer kan hindre formatgjenkjenning.

  2. Filbanen er feil: biblioteket laster stille en tom scene hvis filen ikke blir funnet:

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 bruker ikke-standard linjeavslutninger: åpne i en teksteditor og sørg for at filen er gyldig.

Trinn 4: Fiks koordinatsystemproblemer

Modeller kan vises rotert, speilet eller skalert feil på grunn av forskjeller i koordinatsystemet mellom formater.

Høyrehånd vs venstrehånd, Y-opp vs Z-opp:

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 (f.eks. 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: Håndter minneproblemer med store filer

For filer som er større enn 100 MB, øk Node.js‑haugstørrelsen:

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

Eller sett den i package.json:

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

Behandle store filer én etter én i stedet for parallelt for å unngå minneproblemer ved spissbelastning.


Vanlig feilreferanse

FeilSannsynlig årsakLøsning
Cannot find module '@aspose/3d/formats/obj'ModuloppløsningskonfigurasjonAngi moduleResolution: node16 i tsconfig
scene.rootNode.childNodes er tomFeil alternativer eller fil ikke funnetSjekk filstien; send korrekt *LoadOptions
Geometri vises speilet/omvendtUoverensstemmelse i koordinatsystemAngi flipCoordinateSystem = true
Geometri vises skalert feilEnhetsforskjell mellom formaterAngi scale i lastingsalternativer
ENOMEM eller prosessen avsluttetUtilstrekkelig minne for stor filØk --max-old-space-size
TypeScript-typefeil på node.entityBred entitetstypeBruk instanceof Mesh-vakt

Ofte stilte spørsmål

Hvordan rapporterer jeg en parsefeil?

Åpne en sak på GitHub‑repoet med formatnavnet, en minimal reproducerbar fil og den eksakte feilmeldingen.

Hvorfor har noen mesh-er null kontrollpunkter?

Noen OBJ-grupper definerer kun teksturkoordinater eller normaler uten posisjonsdata. Sjekk mesh.controlPoints.length > 0 før behandling.

Biblioteket ignorerer stille parse‑feil. Hvordan kan jeg oppdage dem?

Pakk scene.open() inn i en try/catch-blokk. Hvis filen er feilformatert, kan biblioteket kaste et unntak eller laste inn en delvis scene:

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

Se også

 Norsk