Jak naprawić błędy modeli 3D w TypeScript

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 version

Jeśli pakiet nie zostanie znaleziony, zainstaluj go ponownie:

npm install @aspose/3d

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

  1. Nieprawidłowe opcje formatu: dla OBJ zawsze przekazuj new ObjLoadOptions(). Używanie ogólnych opcji może uniemożliwić wykrycie formatu.
  2. Ś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());
  1. 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.js

Lub 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łądPrawdopodobna przyczynaNaprawa
Cannot find module '@aspose/3d/formats/obj'Konfiguracja rozwiązywania modułówUstaw moduleResolution: node16 w tsconfig
scene.rootNode.childNodes jest pustyNieprawidłowe opcje lub plik nie został znalezionySprawdź ścieżkę do pliku; podaj prawidłową *LoadOptions
Geometria wydaje się odbita/lustrzanieNiezgodność systemu współrzędnychUstaw flipCoordinateSystem = true
Geometria wydaje się nieprawidłowo skalowanaRóżnica jednostek między formatamiUstaw scale w opcjach ładowania
ENOMEM lub proces został zakończonyNiewystarczająca pamięć dla dużego plikuZwiększ --max-old-space-size
Błąd typu TypeScript w node.entitySzeroki typ encjiUż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);
}

Zobacz także

 Polski