Slik fikser du 3D-modellfeil i TypeScript
Denne guiden dekker de vanligste 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 versionHvis pakken ikke blir funnet, installer på nytt:
npm install @aspose/3dSteg 2: Fiks moduloppløsningsfeil
Feil: Cannot find module '@aspose/3d/formats/obj'
Undermappe‑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:
- Feil formatalternativer: for OBJ, alltid send
new ObjLoadOptions(). Å bruke generiske alternativer kan hindre formatgjenkjenning. - Filstien er feil: biblioteket laster stille inn 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());- OBJ-filen bruker ikke-standard linjeavslutninger: åpne i en teksteditor og sørg for at filen er gyldig.
Steg 4: Fiks koordinatsystemproblemer
Modeller kan vises rotert, speilet eller skalert feil på grunn av forskjeller i koordinatsystemer 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 større enn 100 MB, øk Node.js heap-størrelsen:
node --max-old-space-size=4096 convert.jsEller sett den i package.json:
{
"scripts": {
"convert": "node --max-old-space-size=4096 dist/convert.js"
}
}Behandle store filer én om gangen i stedet for parallelt for å unngå toppminneproblemer.
Vanlig feilreferanse
| Feil | Sannsynlig årsak | Løsning |
|---|---|---|
Cannot find module '@aspose/3d/formats/obj' | Moduloppløsningskonfigurasjon | Sett moduleResolution: node16 i tsconfig |
scene.rootNode.childNodes er tom | Feil alternativer eller fil ikke funnet | Sjekk filstien; oppgi korrekt *LoadOptions |
| Geometri ser speilet/omvendt ut | Koordinatsystemet stemmer ikke | Angi flipCoordinateSystem = true |
| Geometri ser feil skalert ut | Enhetsforskjell mellom formater | Angi scale i lastingsalternativer |
ENOMEM eller prosessen ble drept | Utilstrekkelig minne for stor fil | Øk --max-old-space-size |
TypeScript-typefeil på node.entity | Bred entitetstype | Bruk instanceof Mesh vakt |
Ofte stilte spørsmål
Hvordan rapporterer jeg en parsefeil?
Åpne en sak på GitHub-repositoriet 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 parsefeil. Hvordan kan jeg oppdage dem?
Pakk inn scene.open() 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);
}