Hur man fixar 3D-modellfel i TypeScript
Denna guide täcker de vanligaste felna vid användning av @aspose/3d för TypeScript och Node.js, med praktiska fixer för var och en.
Steg för steg guide
Steg 1: Kontrollera installationen och versionerna
Se till att du är på en stödd Node.js version (18, 20 eller 22) och paketet installeras:
node --version # Must be v18 or later
npm list @aspose/3d # Should show the installed versionOm paketet inte hittas, installera om:
asposefoss/3d is not yet published — build from source until it ships. See the project README for build instructions.
Steg 2: Fix modullösningsfel
fel på: Cannot find module '@aspose/3d/formats/obj'
Sub-vägsimport kräver Node.js 12.7+ paket export. 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ändning av "module": "ES2022" och "moduleResolution": "bundler".
Steg 3: Avlägsna en tom scen efter laddning
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 format alternativ:För OBJ, alltid passera
new ObjLoadOptions().Användning av generiska alternativ kan förhindra formatdetektion. - Filvägen är fel:biblioteket ladda 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-filen använder icke-standardlinjeändningar:Öppna i en textredigerare och se till att filen är giltig.
Steg 4: Fixar koordinat system problem
Modeller kan visas roterade, speglade eller felaktigt skala på grund av att systemskillnaderna mellan formaten samordnas.
Rätt-vänster hand, Y-up vs Z-Up:
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);Skalaproblem (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 minnesfrågor med stora filer
För filer större än 100 MB, öka Node.js heap storlek:
node --max-old-space-size=4096 convert.jsEller sätta in den i package.json:
{
"scripts": {
"convert": "node --max-old-space-size=4096 dist/convert.js"
}
}Processera stora filer en gång i taget snarare än parallellt för att undvika toppminnesproblem.
Vanliga felreferenser
| felet | Kanske orsaken | Fixar |
|---|---|---|
Cannot find module '@aspose/3d/formats/obj' | Modul resolution konfig | Setade moduleResolution: node16 i tsconfig |
scene.rootNode.childNodes är tomt | Fel alternativ eller filen inte hittad | Kontrollera filvägen; pass korrekt *LoadOptions |
| Geometri visas speglat/flipped | Systemförsvaret missmatch | Setade flipCoordinateSystem = true |
| Geometri verkar skala felaktigt | Enhetskillnad mellan format | Setade scale i lastalternativ |
ENOMEM eller processen dödas | Bristfällig minne för stora filer | ökar --max-old-space-size |
TypScript typfel på node.entity | Stora entitetstyp | Användning instanceof Mesh Vaktgarde |
Ofta ställda frågor
Hur rapporterar jag en parsing bug?
Öppna ett ämne om GitHub-reservat med formatnamnet, en minimal reproducerbara fil och exakt felmeddelande.
Varför har vissa mesor nollkontrollpunkter?
Vissa OBJ-grupper definierar endast texturkoordinater eller normaler utan positiondata. mesh.controlPoints.length > 0 innan han behandlar.
Biblioteket ignorerar tyst parsfel. hur kan jag upptäcka dem?
Wrap scene.open() Om filen är felformad kan biblioteket kasta ett undantag eller ladda en delvis scen:
try {
scene.open('model.obj', new ObjLoadOptions());
} catch (err) {
console.error('Failed to load:', err);
}