Hur man fixar 3D-modellfel i TypeScript

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 version

Om 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:

  1. Fel format alternativ:För OBJ, alltid passera new ObjLoadOptions().Användning av generiska alternativ kan förhindra formatdetektion.
  2. 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());
  1. 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.js

Eller 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

feletKanske orsakenFixar
Cannot find module '@aspose/3d/formats/obj'Modul resolution konfigSetade moduleResolution: node16 i tsconfig
scene.rootNode.childNodes är tomtFel alternativ eller filen inte hittadKontrollera filvägen; pass korrekt *LoadOptions
Geometri visas speglat/flippedSystemförsvaret missmatchSetade flipCoordinateSystem = true
Geometri verkar skala felaktigtEnhetskillnad mellan formatSetade scale i lastalternativ
ENOMEM eller processen dödasBristfällig minne för stora filerökar --max-old-space-size
TypScript typfel på node.entityStora entitetstypAnvä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);
}

Se även

 Svenska