Hur man åtgärdar 3D-modellfel i TypeScript
Den här guiden täcker de vanligaste felen när du använder @aspose/3d för TypeScript och Node.js, med praktiska lösningar för varje.
Steg-för-steg-guide
Steg 1: Verifiera installation och versioner
Se till att du använder en stödjande Node.js-version (18, 20 eller 22) och att paketet är installerat:
node --version # Must be v18 or later
npm list @aspose/3d # Should show the installed versionOm paketet inte hittas, installera om:
npm install @aspose/3dSteg 2: Åtgärda fel i modulupplösning
Fel: Cannot find module '@aspose/3d/formats/obj'
Undervägssökningar kräver Node.js 12.7+ paketexport. I TypeScript, ställ in rätt modulupplösning:
// tsconfig.json
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"moduleResolution": "node16",
"strict": true
}
}För ESM-projekt, använd "module": "ES2022" och "moduleResolution": "bundler".
Steg 3: Felsök en tom scen efter inläsning
Om scene.rootNode.childNodes är tom efter 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}`);Vanliga orsaker:
- Fel formatalternativ: för OBJ, skicka alltid
new ObjLoadOptions(). Att använda generiska alternativ kan förhindra formatdetektering. - Filvägen är felaktig: biblioteket laddar tyst en tom scen om filen inte hittas:
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-fil använder icke-standard radslut: öppna i en textredigerare och säkerställ att filen är giltig.
Steg 4: Åtgärda koordinatsystemproblem
Modeller kan visas roterade, spegelvända eller felaktigt skalade på grund av skillnader i koordinatsystem mellan format.
Högerhand vs vänsterhand, Y-upp vs Z-upp:
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);Skalningsproblem (t.ex. STL i millimeter vs glTF i meter):
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);Steg 5: Hantera minnesproblem med stora filer
För filer större än 100 MB, öka Node.js:s heap‑storlek:
node --max-old-space-size=4096 convert.jsEller ange det i package.json:
{
"scripts": {
"convert": "node --max-old-space-size=4096 dist/convert.js"
}
}Bearbeta stora filer en i taget istället för parallellt för att undvika toppminnesproblem.
Vanlig felreferens
| Fel | Trolig orsak | Åtgärd |
|---|---|---|
Cannot find module '@aspose/3d/formats/obj' | Modulupplösningskonfiguration | Ställ in moduleResolution: node16 i tsconfig |
scene.rootNode.childNodes är tom | Fel alternativ eller filen hittades inte | Kontrollera filsökväg; ange korrekt *LoadOptions |
| Geometri verkar speglad/vänd | Koordinatsystem matchar inte | Ställ in flipCoordinateSystem = true |
| Geometri verkar felaktigt skalad | Enhetskillnad mellan format | Ställ in scale i laddningsalternativ |
ENOMEM eller processen avbröts | Otillräckligt minne för stor fil | Öka --max-old-space-size |
TypeScript-typfel på node.entity | Bred entitetstyp | Använd instanceof Mesh guard |
Vanliga frågor
Hur rapporterar jag ett parsningsfel?
Öppna ett ärende på GitHub‑arkivet med formatnamnet, en minimal reproducerbar fil och det exakta felmeddelandet.
Varför har vissa meshar noll kontrollpunkter?
Vissa OBJ-grupper definierar endast texturkoordinater eller normaler utan positionsdata. Kontrollera mesh.controlPoints.length > 0 innan bearbetning.
Biblioteket ignorerar tyst parsningsfel. Hur kan jag upptäcka dem?
Omslut scene.open() i ett try/catch‑block. Om filen är felaktig kan biblioteket kasta ett undantag eller ladda en partiell scen:
try {
scene.open('model.obj', new ObjLoadOptions());
} catch (err) {
console.error('Failed to load:', err);
}