Jak opravit chyby 3D modelu v TypeScriptu

Jak opravit chyby 3D modelu v TypeScriptu

Tento průvodce pokrývá nejčastější chyby při používání @aspose/3d pro TypeScript a Node.js, s praktickými opravami pro každou.

Průvodce krok za krokem

Krok 1: Ověřte instalaci a verze

Ujistěte se, že používáte podporovanou verzi Node.js (18, 20 nebo 22) a že je balíček nainstalován:

node --version          # Must be v18 or later
npm list @aspose/3d     # Should show the installed version

Pokud balíček není nalezen, přeinstalujte:

npm install @aspose/3d

Krok 2: Opravte chyby při řešení modulů

Chyba: Cannot find module '@aspose/3d/formats/obj'

Importy podcest vyžadují exporty balíčku v Node.js 12.7+. V TypeScriptu nastavte správné řešení modulů:

// tsconfig.json
{
  "compilerOptions": {
    "target": "ES2020",
    "module": "commonjs",
    "moduleResolution": "node16",
    "strict": true
  }
}

Pro ESM projekty použijte "module": "ES2022" a "moduleResolution": "bundler".


Krok 3: Ladění prázdné scény po načtení

Pokud scene.rootNode.childNodes je prázdný 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}`);

Běžné příčiny:

  1. Nesprávné možnosti formátu: pro OBJ vždy předávejte new ObjLoadOptions(). Používání obecných možností může zabránit detekci formátu.
  2. Cesta k souboru je špatná: knihovna tiše načte prázdnou scénu, pokud soubor není nalezen:
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. Soubor OBJ používá nestandardní konce řádků: otevřete v textovém editoru a ujistěte se, že soubor je platný.

Krok 4: Opravit problémy se souřadnicovým systémem

Modely se mohou jevit jako otočené, zrcadlené nebo nesprávně měřítkované kvůli rozdílům v souřadnicových systémech mezi formáty.

Pravá ruka vs levá ruka, Y‑nahoru vs Z‑nahoru:

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);

Problémy se škálou (např. STL v milimetrech vs glTF v metrech):

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: Řešit problémy s pamětí u velkých souborů

Pro soubory větší než 100 MB zvyšte velikost haldy Node.js:

node --max-old-space-size=4096 convert.js

Nebo nastavte v package.json:

{
  "scripts": {
    "convert": "node --max-old-space-size=4096 dist/convert.js"
  }
}

Zpracovávejte velké soubory po jednom místo paralelně, abyste se vyhnuli špičkovým problémům s pamětí.


Běžná reference chyb

ChybaPravděpodobná příčinaOprava
Cannot find module '@aspose/3d/formats/obj'Konfigurace rozlišení modulůNastavit moduleResolution: node16 v tsconfigu
scene.rootNode.childNodes je prázdnýŠpatné možnosti nebo soubor nenalezenZkontrolujte cestu k souboru; předávejte správnou *LoadOptions
Geometrie se jeví jako zrcadlená/převrácenáNeshoda souřadnicových systémůNastavit flipCoordinateSystem = true
Geometrie se jeví nesprávně škálovanáJednotkový rozdíl mezi formátyNastavit scale v možnostech načítání
ENOMEM nebo proces ukončenNedostatek paměti pro velký souborZvýšit --max-old-space-size
Chyba typu TypeScript v node.entityObecný typ entityPoužít instanceof Mesh ochrana

Často kladené otázky

Jak nahlásit chybu při parsování?

Otevřete issue na repozitář GitHub s názvem formátu, minimálním reprodukovatelným souborem a přesnou chybovou zprávou.

Proč některé sítě (meshe) mají nulový počet kontrolních bodů?

Některé OBJ skupiny definují pouze texturové souřadnice nebo normály bez dat o pozici. Zkontrolujte mesh.controlPoints.length > 0 před zpracováním.

Knihovna tiše ignoruje chyby parsování. Jak je mohu detekovat?

Zabalte scene.open() v bloku try/catch. Pokud je soubor poškozený, knihovna může vyhodit výjimku nebo načíst částečnou scénu:

try {
    scene.open('model.obj', new ObjLoadOptions());
} catch (err) {
    console.error('Failed to load:', err);
}

Viz také

 Čeština