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 versionPokud balíček není nalezen, přeinstalujte:
npm install @aspose/3dKrok 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:
- 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. - 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());- 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.jsNebo 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
| Chyba | Pravděpodobná příčina | Oprava |
|---|---|---|
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 nenalezen | Zkontrolujte 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áty | Nastavit scale v možnostech načítání |
ENOMEM nebo proces ukončen | Nedostatek paměti pro velký soubor | Zvýšit --max-old-space-size |
Chyba typu TypeScript v node.entity | Obecný typ entity | Použí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);
}