Sådan løser du 3D‑modelfejl i TypeScript
Denne vejledning dækker de mest almindelige fejl, når du bruger @aspose/3d til TypeScript og Node.js, med praktiske løsninger for hver.
Trin-for-trin guide
Trin 1: Bekræft 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 versionHvis pakken ikke findes, geninstaller:
npm install @aspose/3dTrin 2: Ret modulopløsningsfejl
Fejl: Cannot find module '@aspose/3d/formats/obj'
Sub‑sti‑importer kræver Node.js 12.7+ pakkeeksporter. I TypeScript skal du indstille den korrekte modulopløsning:
// tsconfig.json
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"moduleResolution": "node16",
"strict": true
}
}For ESM‑projekter skal du bruge "module": "ES2022" og "moduleResolution": "bundler".
Trin 3: Fejlfind 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:
Forkerte formatindstillinger: for OBJ, skal du altid videregive
new ObjLoadOptions(). Brug af generiske indstillinger kan forhindre formatgenkendelse.Filstien er forkert: biblioteket indlæser tavst 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());- OBJ file 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, spejlvendt 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 (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);Trin 5: Håndter hukommelsesproblemer med store filer
For filer, der er større end 100 MB, skal du øge Node.js‑heapstørrelsen:
node --max-old-space-size=4096 convert.jsEller sæt den 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å toppe i hukommelsesforbruget.
Almindelig fejlreference
| Fejl | Sandsynlig årsag | Løsning |
|---|---|---|
Cannot find module '@aspose/3d/formats/obj' | Modulopløsningskonfiguration | Angiv moduleResolution: node16 i tsconfig |
scene.rootNode.childNodes er tom | Forkerte indstillinger eller fil ikke fundet | Kontroller filstien; videregiv korrekt *LoadOptions |
| Geometri fremstår spejlet/omvendt | Uoverensstemmelse i koordinatsystem | Angiv flipCoordinateSystem = true |
| Geometri fremstår skaleret forkert | Enhedsforskel mellem formater | Angiv scale i indlæsningsindstillinger |
ENOMEM eller processen dræbt | Utilstrækkelig hukommelse til stor fil | Øg --max-old-space-size |
TypeScript-typfejl på node.entity | Bred entitetstype | Brug instanceof Mesh-vagt |
Ofte stillede spørgsmål
Hvordan rapporterer jeg en parsefejl?
Åbn en sag på GitHub-repositoriet 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 parse‑fejl. Hvordan kan jeg opdage dem?
Pak scene.open() ind 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);
}