Wie man 3D‑Modellfehler in TypeScript behebt
Dieser Leitfaden behandelt die häufigsten Fehler bei der Verwendung von @aspose/3d für TypeScript und Node.js und bietet praktische Lösungen für jeden.
Schritt-für-Schritt-Anleitung
Schritt 1: Installation und Versionen überprüfen
Stellen Sie sicher, dass Sie eine unterstützte Node.js-Version (18, 20 oder 22) verwenden und das Paket installiert ist:
node --version # Must be v18 or later
npm list @aspose/3d # Should show the installed versionWenn das Paket nicht gefunden wird, neu installieren:
npm install @aspose/3dSchritt 2: Modulauflösungsfehler beheben
Fehler: Cannot find module '@aspose/3d/formats/obj'
Sub-Pfad‑Importe erfordern Node.js 12.7+ Paket‑Exports. In TypeScript setzen Sie die korrekte Modulauflösung:
// tsconfig.json
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"moduleResolution": "node16",
"strict": true
}
}Für ESM‑Projekte verwenden Sie "module": "ES2022" und "moduleResolution": "bundler".
Schritt 3: Debuggen einer leeren Szene nach dem Laden
Wenn scene.rootNode.childNodes nach scene.open() leer ist:
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}`);Häufige Ursachen:
Falsche Formatoptionen: Für OBJ immer
new ObjLoadOptions()übergeben. Die Verwendung generischer Optionen kann die Format‑Erkennung verhindern.Dateipfad ist falsch: die Bibliothek lädt stillschweigend eine leere Szene, wenn die Datei nicht gefunden wird:
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-Datei verwendet nicht standardmäßige Zeilenenden: Öffnen Sie die Datei in einem Texteditor und stellen Sie sicher, dass sie gültig ist.
Schritt 4: Koordinatensystemprobleme beheben
Modelle können aufgrund von Unterschieden im Koordinatensystem zwischen Formaten gedreht, gespiegelt oder falsch skaliert angezeigt werden.
Rechte-Hand vs Linke-Hand, 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);Skalierungsprobleme (z. B. STL in Millimetern vs glTF in Metern):
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);Step 5: Umgang mit Speicherproblemen bei großen Dateien
Für Dateien, die größer als 100 MB sind, erhöhen Sie die Node.js‑Heap‑Größe:
node --max-old-space-size=4096 convert.jsOder setzen Sie es in package.json:
{
"scripts": {
"convert": "node --max-old-space-size=4096 dist/convert.js"
}
}Verarbeiten Sie große Dateien nacheinander statt parallel, um Spitzen‑Speicherprobleme zu vermeiden.
Allgemeine Fehlerreferenz
| Fehler | Wahrscheinliche Ursache | Lösung |
|---|---|---|
Cannot find module '@aspose/3d/formats/obj' | Modulauflösungs‑Konfiguration | Setze moduleResolution: node16 in tsconfig |
scene.rootNode.childNodes ist leer | Falsche Optionen oder Datei nicht gefunden | Überprüfe den Dateipfad; übergebe das korrekte *LoadOptions |
| Geometrie erscheint gespiegelt/umgekehrt | Koordinatensystem stimmt nicht überein | Setze flipCoordinateSystem = true |
| Geometrie erscheint falsch skaliert | Einheitenunterschied zwischen Formaten | Setze scale in Ladeoptionen |
ENOMEM oder Prozess beendet | Unzureichender Speicher für große Datei | Erhöhe --max-old-space-size |
TypeScript‑Typfehler bei node.entity | Allgemeiner Entitätstyp | Verwende instanceof Mesh‑Guard |
Häufig gestellte Fragen
Wie melde ich einen Parsing-Fehler?
Öffnen Sie ein Issue im GitHub-Repository mit dem Formatnamen, einer minimal reproduzierbaren Datei und der genauen Fehlermeldung.
Warum haben einige Meshes keine Kontrollpunkte?
Einige OBJ‑Gruppen definieren nur Texturkoordinaten oder Normalen ohne Positionsdaten. Überprüfen Sie mesh.controlPoints.length > 0 vor der Verarbeitung.
Die Bibliothek ignoriert stillschweigend Parsing‑Fehler. Wie kann ich sie erkennen?
Setzen Sie scene.open() in einen try/catch‑Block. Wenn die Datei fehlerhaft ist, kann die Bibliothek eine Ausnahme auslösen oder eine teilweise Szene laden:
try {
scene.open('model.obj', new ObjLoadOptions());
} catch (err) {
console.error('Failed to load:', err);
}