TypeScript'te 3D Model Hatalarını Nasıl Düzeltiriz

TypeScript'te 3D Model Hatalarını Nasıl Düzeltiriz

Bu kılavuz, TypeScript ve Node.js için @aspose/3d kullanırken en yaygın hataları ve her biri için pratik çözümleri kapsar.

Adım Adım Kılavuz

Adım 1: Kurulumu ve Sürümleri Doğrulayın

Desteklenen bir Node.js sürümünde (18, 20 veya 22) olduğunuzdan ve paketin yüklü olduğundan emin olun:

node --version          # Must be v18 or later
npm list @aspose/3d     # Should show the installed version

Paket bulunamazsa, yeniden yükleyin:

npm install @aspose/3d

Adım 2: Modül Çözümleme Hatalarını Düzelt

Hata: Cannot find module '@aspose/3d/formats/obj'

Alt yol ithalatları Node.js 12.7+ paket dışa aktarımlarını gerektirir. TypeScript’te doğru modül çözümlemesini ayarlayın:

// tsconfig.json
{
  "compilerOptions": {
    "target": "ES2020",
    "module": "commonjs",
    "moduleResolution": "node16",
    "strict": true
  }
}

ESM projeleri için "module": "ES2022" ve "moduleResolution": "bundler" kullanın.


Adım 3: Yükleme Sonrası Boş Sahneyi Hata Ayıkla

Eğer scene.rootNode.childNodes, scene.open() sonrasında boşsa:

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}`);

Yaygın nedenler:

  1. Yanlış format seçenekleri: OBJ için her zaman new ObjLoadOptions() geçirin. Genel seçenekleri kullanmak format algılamasını engelleyebilir.

  2. Dosya yolu yanlış: kütüphane dosya bulunamadığında sessizce boş bir sahne yükler:

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 dosyası standart dışı satır sonları kullanıyor: bir metin düzenleyicide açın ve dosyanın geçerli olduğundan emin olun.

Adım 4: Koordinat Sistemi Sorunlarını Düzelt

Modeller, formatlar arasındaki koordinat sistemi farklılıkları nedeniyle döndürülmüş, yansıtılmış veya yanlış ölçeklendirilmiş görünebilir.

Sağ el vs sol el, Y-yukarı vs Z-yukarı:

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);

Ölçek sorunları (ör. STL milimetre cinsinden, glTF metre cinsinden):

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);

Adım 5: Büyük Dosyalarla Bellek Sorunlarını Ele Al

100 MB’den büyük dosyalar için Node.js yığın boyutunu artırın:

node --max-old-space-size=4096 convert.js

Veya package.json içinde ayarlayın:

{
  "scripts": {
    "convert": "node --max-old-space-size=4096 dist/convert.js"
  }
}

Büyük dosyaları paralel yerine tek tek işleyerek en yüksek bellek sorunlarından kaçının.


Ortak Hata Referansı

HataMuhtemel NedenÇözüm
Cannot find module '@aspose/3d/formats/obj'Modül çözümleme yapılandırmasıtsconfig içinde moduleResolution: node16 ayarlayın
scene.rootNode.childNodes boşYanlış seçenekler veya dosya bulunamadıDosya yolunu kontrol edin; doğru *LoadOptions geçirin
Geometri yansıtılmış/ters görünüyorKoordinat sistemi uyuşmazlığıflipCoordinateSystem = true ayarlayın
Geometri yanlış ölçeklenmiş görünüyorBiçimler arasındaki birim farkıYükleme seçeneklerinde scale ayarlayın
ENOMEM veya süreç sonlandırıldıBüyük dosya için yetersiz bellek--max-old-space-size artırın
node.entity üzerinde TypeScript tip hatasıGeniş varlık tipiinstanceof Mesh korumasını kullanın

Sıkça Sorulan Sorular

Bir ayrıştırma hatasını nasıl bildiririm?

Biçim adı, minimal yeniden üretilebilir bir dosya ve tam hata mesajı ile GitHub deposunda bir sorun açın.

Neden bazı ağlar sıfır kontrol noktasına sahiptir?

Bazı OBJ grupları yalnızca doku koordinatlarını veya normalleri, konum verisi olmadan tanımlar. İşleme başlamadan önce mesh.controlPoints.length > 0 kontrol edin.

Kütüphane ayrıştırma hatalarını sessizce yok sayar. Bunları nasıl tespit edebilirim?

scene.open() öğesini bir try/catch bloğuna sarın. Dosya bozuksa, kütüphane bir istisna fırlatabilir veya kısmi bir sahne yükleyebilir:

try {
    scene.open('model.obj', new ObjLoadOptions());
} catch (err) {
    console.error('Failed to load:', err);
}

Ayrıca Bakınız

 Türkçe