Wie man 3D‑Modellfehler in TypeScript behebt

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 version

Wenn das Paket nicht gefunden wird, neu installieren:

npm install @aspose/3d

Schritt 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:

  1. Falsche Formatoptionen: Für OBJ immer new ObjLoadOptions() übergeben. Die Verwendung generischer Optionen kann die Format‑Erkennung verhindern.

  2. 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());
  1. 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.js

Oder 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

FehlerWahrscheinliche UrsacheLösung
Cannot find module '@aspose/3d/formats/obj'Modulauflösungs‑KonfigurationSetze moduleResolution: node16 in tsconfig
scene.rootNode.childNodes ist leerFalsche Optionen oder Datei nicht gefundenÜberprüfe den Dateipfad; übergebe das korrekte *LoadOptions
Geometrie erscheint gespiegelt/umgekehrtKoordinatensystem stimmt nicht übereinSetze flipCoordinateSystem = true
Geometrie erscheint falsch skaliertEinheitenunterschied zwischen FormatenSetze scale in Ladeoptionen
ENOMEM oder Prozess beendetUnzureichender Speicher für große DateiErhöhe --max-old-space-size
TypeScript‑Typfehler bei node.entityAllgemeiner EntitätstypVerwende 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);
}

Siehe auch

 Deutsch