Kaip ištaisyti 3D modelio klaidas TypeScript
Šiame vadove aptariamos dažniausiai pasitaikančios klaidos, kai naudojama @aspose/3d skirta TypeScript ir Node.js, su praktiniais sprendimais kiekvienai.
Žingsnis po žingsnio vadovas
Žingsnis 1: Patikrinkite įdiegimą ir versijas
Įsitikinkite, kad naudojate palaikomą Node.js versiją (18, 20 arba 22) ir paketas yra įdiegtas:
node --version # Must be v18 or later
npm list @aspose/3d # Should show the installed versionJei paketas nerastas, įdiekite iš naujo:
npm install @aspose/3dŽingsnis 2: Ištaisykite modulio rezoliucijos klaidas
Klaida: Cannot find module '@aspose/3d/formats/obj'
Subkelių importai reikalauja Node.js 12.7+ paketų eksporto. TypeScript kalboje nustatykite teisingą modulio rezoliuciją:
// tsconfig.json
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"moduleResolution": "node16",
"strict": true
}
}ESM projektams naudokite "module": "ES2022" ir "moduleResolution": "bundler".
Žingsnis 3: Derinkite tuščią sceną po įkėlimo
Jei scene.rootNode.childNodes yra tuščias 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}`);Dažnos priežastys:
- Neteisingi formato parametrai: OBJ, visada perduokite
new ObjLoadOptions(). Naudojant bendrus parametrus gali būti užkirstas kelias formato aptikimui. - Failo kelias yra neteisingas: biblioteka tyliai įkelia tuščią sceną, jei failas nerastas:
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());- OBJ failas naudoja nestandartinius eilučių pabaigos ženklus: atidarykite teksto redaktoriuje ir įsitikinkite, kad failas yra galiojantis.
Žingsnis 4: Ištaisyti koordinačių sistemos problemas
Modeliai gali pasirodyti pasukę, veidrodiniai arba neteisingai mastelio dėl koordinačių sistemos skirtumų tarp formatų.
Dešiniosios rankos vs kairiosios rankos, Y‑aukštyje vs Z‑aukštyje:
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);Mastelio problemos (pvz., STL milimetrais vs glTF metrais):
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);Žingsnis 5: Tvarkyti atminties problemas su dideliais failais
Failams, didesniems nei 100 MB, padidinkite Node.js krūvos (heap) dydį:
node --max-old-space-size=4096 convert.jsArba nustatykite tai package.json:
{
"scripts": {
"convert": "node --max-old-space-size=4096 dist/convert.js"
}
}Apdorokite didelius failus po vieną, o ne lygiagrečiai, kad išvengtumėte didžiausios atminties problemų.
Bendras klaidų šaltinis
| Klaida | Tikėtina priežastis | Pataisa |
|---|---|---|
Cannot find module '@aspose/3d/formats/obj' | Modulių sprendimo konfigūracija | Nustatyti moduleResolution: node16 tsconfig faile |
scene.rootNode.childNodes yra tuščias | Neteisingi parametrai arba failas nerastas | Patikrinkite failo kelią; pateikite teisingą *LoadOptions |
| Geometrija atrodo veidrodinė/apversta | Koordinačių sistemos nesutapimas | Nustatyti flipCoordinateSystem = true |
| Geometrija atrodo neteisingai mastelio | Vienetų skirtumas tarp formatų | Nustatyti scale įkrovimo parinktyse |
ENOMEM arba procesas nutrauktas | Trūksta atminties dideliam failui | Padidinti --max-old-space-size |
TypeScript tipo klaida ant node.entity | Bendras objektų tipas | Naudoti instanceof Mesh apsauga |
Dažniausiai užduodami klausimai
Kaip pranešti apie parsinimo klaidą?
Atidarykite problemą GitHub saugykla su formato pavadinimu, minimaliai atkuriamu failu ir tikslia klaidos žinute.
Kodėl kai kurių tinklų (mesh) kontrolinių taškų nėra?
Kai kurie OBJ grupės apibrėžia tik tekstūros koordinates arba normalės be pozicijos duomenų. Patikrinkite mesh.controlPoints.length > 0 prieš apdorojimą.
Biblioteka tyliai ignoruoja parsinimo klaidas. Kaip jas aptikti?
Apsupkite scene.open() try/catch bloke. Jei failas yra sugadintas, biblioteka gali išmesti išimtį arba įkelti dalinę sceną:
try {
scene.open('model.obj', new ObjLoadOptions());
} catch (err) {
console.error('Failed to load:', err);
}