Kaip ištaisyti 3D modelio klaidas TypeScript kalboje
Šiame vadove aptariamos dažniausiai pasitaikančios klaidos naudojant @aspose/3d TypeScript ir Node.js, pateikiant praktinius sprendimus kiekvienai iš jų.
Ž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, iš naujo įdiekite:
npm install @aspose/3dŽingsnis 2: Ištaisyti modulio rezoliucijos klaidas
Klaida: Cannot find module '@aspose/3d/formats/obj'
Sub‑kelių importavimui reikalingi Node.js 12.7+ paketų eksportai. 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: Derinti 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}`);Bendros priežastys:
Neteisingi formato parametrai: OBJ atveju visada perduokite
new ObjLoadOptions(). Naudojant bendruosius parametrus gali būti užkirstas kelias formato aptikimui.Neteisingas failo kelias: 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 koordinatų sistemos problemas
Modeliai gali būti rodomi pasukę, veidrodžiuoti arba neteisingai mastelio pakeisti dėl koordinatės sistemos skirtumų tarp formatų.
Dešinės rankos vs kairės 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, kurių dydis didesnis nei 100 MB, padidinkite Node.js krūvos dydį:
node --max-old-space-size=4096 convert.jsArba nustatykite jį 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 didelio atminties naudojimo problemų.
Bendras klaidų žinynas
| Klaida | Tikėtina priežastis | Sprendimas |
|---|---|---|
Cannot find module '@aspose/3d/formats/obj' | Modulio rezoliucijos konfigūracija | Nustatykite moduleResolution: node16 tsconfig |
scene.rootNode.childNodes yra tuščias | Neteisingi parametrai arba failas nerastas | Patikrinkite failo kelią; perduokite teisingą *LoadOptions |
| Geometrija atrodo veidrodinė/apversta | Koordinačių sistemos nesutapimas | Nustatykite flipCoordinateSystem = true |
| Geometrija atrodo neteisingai mastelio | Vienetų skirtumas tarp formatų | Nustatykite scale įkėlimo parinktyse |
ENOMEM arba procesas nutrauktas | Neužtenka atminties dideliam failui | Padidinkite --max-old-space-size |
TypeScript tipo klaida ant node.entity | Bendras objekto tipas | Naudokite instanceof Mesh apsaugą |
Dažnai užduodami klausimai
Kaip pranešti apie analizės klaidą?
Atidarykite problemos pranešimą GitHub saugykloje su formato pavadinimu, minimaliai atkuriamu failu ir tikslia klaidos žinute.
Kodėl kai kurie tinklai turi nulinį valdymo taškų skaičių?
Kai kurios OBJ grupės apibrėžia tik tekstūros koordinates arba normalius be pozicijos duomenų. Patikrinkite mesh.controlPoints.length > 0 prieš apdorojant.
Biblioteka tyliai ignoruoja analizės klaidas. Kaip jas aptikti?
Įdėkite scene.open() į try/catch bloką. Jei failas yra neteisingai suformuotas, 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);
}