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 gids
Stap 1: Controleer installatie en versies
Zorg ervoor dat je een ondersteunde Node.js-versie (18, 20 of 22) gebruikt en dat het pakket geïnstalleerd is:
node --version # Must be v18 or later
npm list @aspose/3d # Should show the installed versionAls het pakket niet wordt gevonden, installeer het dan opnieuw:
npm install @aspose/3dStap 2: Los module-resolutiefouten op
Fout: Cannot find module '@aspose/3d/formats/obj'
Sub‑pad‑imports vereisen Node.js 12.7+ package‑exports. Stel in TypeScript de juiste module‑resolutie in:
// tsconfig.json
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"moduleResolution": "node16",
"strict": true
}
}Voor ESM-projecten, gebruik "module": "ES2022" en "moduleResolution": "bundler".
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 formaatopties: voor OBJ, altijd doorgeven
new ObjLoadOptions(). Het gebruik van generieke opties kan de 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-bestand 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 lijken vanwege verschillen in coördinatensystemen tussen formaten.
Rechterhand vs linkerhand, Y-omhoog vs Z-omhoog:
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: Geheugenproblemen met grote bestanden aanpakken
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.
Veelvoorkomende foutreferentie
| Fout | Waarschijnlijke oorzaak | Oplossing |
|---|---|---|
Cannot find module '@aspose/3d/formats/obj' | Module‑resolutieconfiguratie | Instellen moduleResolution: node16 in tsconfig |
scene.rootNode.childNodes is leeg | Verkeerde opties of bestand niet gevonden | Controleer het bestandspad; geef het juiste door *LoadOptions |
| Geometrie lijkt gespiegeld/omgeklapt | Coördinatensysteem komt niet overeen | Instellen flipCoordinateSystem = true |
| Geometrie lijkt onjuist geschaald | Eenheidsverschil tussen formaten | Instellen scale in laadopties |
ENOMEM of proces beëindigd | Onvoldoende geheugen voor groot bestand | Verhogen --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 bestandsnaam, een minimaal reproduceerbaar bestand en de exacte foutmelding.
Waarom hebben sommige meshes nul controlepunten?
Sommige OBJ-groepen definiëren alleen textuurcoördinaten of normaalvectoren zonder positiedata. Controleer mesh.controlPoints.length > 0 voordat u verwerkt.
De bibliotheek negeert parsefouten stilzwijgend. Hoe kan ik ze detecteren?
Omwikkel 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);
}