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 versionAls het pakket niet wordt gevonden, installeer het opnieuw:
npm install @aspose/3dStap 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:
Verkeerde formatopties: voor OBJ, altijd
new ObjLoadOptions()doorgeven. Het gebruik van generieke opties kan formatdetectie voorkomen.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());- 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.jsOf 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
| Fout | Waarschijnlijke oorzaak | Oplossing |
|---|---|---|
Cannot find module '@aspose/3d/formats/obj' | Module‑resolutieconfiguratie | Stel moduleResolution: node16 in tsconfig |
scene.rootNode.childNodes is leeg | Verkeerde opties of bestand niet gevonden | Controleer het bestandspad; geef de juiste *LoadOptions door |
| Geometrie lijkt gespiegeld/omgekeerd | Coördinatensysteem komt niet overeen | Stel flipCoordinateSystem = true in |
| Geometrie lijkt onjuist geschaald | Eenheidsverschil tussen formaten | Stel scale in laadopties |
ENOMEM of proces beëindigd | Onvoldoende geheugen voor groot bestand | Verhoog --max-old-space-size |
TypeScript typefout op node.entity | Algemeen entiteitstype | Gebruik 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);
}