Jak naprawić błędy modeli 3D w TypeScript
Ten przewodnik opisuje najczęstsze błędy podczas używania @aspose/3d dla TypeScript i Node.js, z praktycznymi rozwiązaniami dla każdego.
Przewodnik krok po kroku
Krok 1: Zweryfikuj instalację i wersje
Upewnij się, że używasz wspieranej wersji Node.js (18, 20 lub 22) oraz że pakiet jest zainstalowany:
node --version # Must be v18 or later
npm list @aspose/3d # Should show the installed versionJeśli pakiet nie zostanie znaleziony, zainstaluj go ponownie:
npm install @aspose/3dKrok 2: Napraw błędy rozwiązywania modułów
Błąd: Cannot find module '@aspose/3d/formats/obj'
Importy podścieżkowe wymagają eksportów pakietu w Node.js 12.7+. W TypeScript ustaw poprawne rozwiązywanie modułów:
// tsconfig.json
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"moduleResolution": "node16",
"strict": true
}
}W projektach ESM użyj "module": "ES2022" oraz "moduleResolution": "bundler".
Krok 3: Debugowanie pustej sceny po załadowaniu
Jeśli scene.rootNode.childNodes jest pusty po 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}`);Typowe przyczyny:
- Nieprawidłowe opcje formatu: dla OBJ zawsze przekazuj
new ObjLoadOptions(). Używanie ogólnych opcji może uniemożliwić wykrycie formatu. - Ścieżka do pliku jest nieprawidłowa: biblioteka cicho ładuje pustą scenę, jeśli plik nie zostanie znaleziony:
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());- Plik OBJ używa niestandardowych zakończeń linii: otwórz w edytorze tekstu i upewnij się, że plik jest prawidłowy.
Krok 4: Napraw problemy z układem współrzędnych
Modele mogą wyglądać na obrócone, odbite lub nieprawidłowo skalowane z powodu różnic w układzie współrzędnych między formatami.
Praworęczny vs leworęczny, 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);Problemy ze skalą (np. STL w milimetrach vs glTF w metrach):
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);Krok 5: Radzenie sobie z problemami pamięci przy dużych plikach
Dla plików większych niż 100 MB zwiększ rozmiar sterty Node.js:
node --max-old-space-size=4096 convert.jsLub ustaw to w package.json:
{
"scripts": {
"convert": "node --max-old-space-size=4096 dist/convert.js"
}
}Przetwarzaj duże pliki pojedynczo, a nie równolegle, aby uniknąć szczytowych problemów z pamięcią.
Referencja typowych błędów
| Błąd | Prawdopodobna przyczyna | Naprawa |
|---|---|---|
Cannot find module '@aspose/3d/formats/obj' | Konfiguracja rozwiązywania modułów | Ustaw moduleResolution: node16 w tsconfig |
scene.rootNode.childNodes jest pusty | Nieprawidłowe opcje lub plik nie został znaleziony | Sprawdź ścieżkę do pliku; podaj prawidłową *LoadOptions |
| Geometria wydaje się odbita/lustrzanie | Niezgodność systemu współrzędnych | Ustaw flipCoordinateSystem = true |
| Geometria wydaje się nieprawidłowo skalowana | Różnica jednostek między formatami | Ustaw scale w opcjach ładowania |
ENOMEM lub proces został zakończony | Niewystarczająca pamięć dla dużego pliku | Zwiększ --max-old-space-size |
Błąd typu TypeScript w node.entity | Szeroki typ encji | Użyj instanceof Mesh strażnika |
Najczęściej zadawane pytania
Jak zgłosić błąd parsowania?
Otwórz zgłoszenie w repozytorium GitHub z nazwą formatu, minimalnym plikiem reprodukcyjnym oraz dokładnym komunikatem o błędzie.
Dlaczego niektóre siatki mają zero punktów kontrolnych?
Niektóre grupy OBJ definiują tylko współrzędne tekstury lub normalne bez danych pozycji. Sprawdź mesh.controlPoints.length > 0 przed przetwarzaniem.
Biblioteka cicho ignoruje błędy parsowania. Jak je wykryć?
Zawijaj scene.open() w bloku try/catch. Jeśli plik jest uszkodzony, biblioteka może zgłosić wyjątek lub załadować częściową scenę:
try {
scene.open('model.obj', new ObjLoadOptions());
} catch (err) {
console.error('Failed to load:', err);
}