TypeScript'te 3D Model Hatalarını Nasıl Düzeltirsiniz
Bu kılavuz, kullanırken en yaygın hataları kapsar @aspose/3d TypeScript ve Node.js için, her biri için pratik çözümlerle.
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 versionPaket bulunamazsa, yeniden yükleyin:
npm install @aspose/3dAdım 2: Modül Çözümleme Hatalarını Düzeltin
Hata: Cannot find module '@aspose/3d/formats/obj'
Alt yol ithalatları, Node.js 12.7+ paket dışa aktarımları 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, kullanın "module": "ES2022" ve "moduleResolution": "bundler".
Adım 3: Yükleme Sonrası Boş Sahneyi Hata Ayıklayın
Eğer scene.rootNode.childNodes boş ise 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}`);Yaygın nedenler:
- Yanlış format seçenekleri: OBJ için, her zaman iletin
new ObjLoadOptions(). Genel seçenekler kullanmak format algılamasını engelleyebilir. - 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());- 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üzeltin
Modeller, formatlar arasındaki koordinat sistemi farklılıkları nedeniyle döndürülmüş, yansıtılmış veya ölçeklendirilmiş hatalı 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ın
100 MB’den büyük dosyalar için Node.js yığın boyutunu artırın:
node --max-old-space-size=4096 convert.jsVeya şunu ayarlayın package.json:
{
"scripts": {
"convert": "node --max-old-space-size=4096 dist/convert.js"
}
}Zirve bellek sorunlarından kaçınmak için büyük dosyaları paralel yerine tek tek işleyin.
Yaygın Hata Referansı
| Hata | Muhtemel Neden | Düzeltme |
|---|---|---|
Cannot find module '@aspose/3d/formats/obj' | Modül çözümleme yapılandırması | Ayarla moduleResolution: node16 tsconfig içinde |
scene.rootNode.childNodes boş | Yanlış seçenekler veya dosya bulunamadı | Dosya yolunu kontrol edin; doğru girin *LoadOptions |
| Geometri yansıtılmış/ters görünüyor | Koordinat sistemi uyumsuzluğu | Ayarla flipCoordinateSystem = true |
| Geometri yanlış ölçeklenmiş görünüyor | Biçimler arasındaki birim farkı | Ayarla scale yükleme seçeneklerinde |
ENOMEM veya işlem sonlandırıldı | Büyük dosya için yetersiz bellek | Artır --max-old-space-size |
TypeScript tip hatası: node.entity | Geniş varlık türü | Kullan instanceof Mesh koruma |
Sık Sorulan Sorular
Bir ayrıştırma hatasını nasıl bildiririm?
Şu depoda bir issue açın GitHub deposu format adı, minimal yeniden üretilebilir dosya ve tam hata mesajı ile.
Neden bazı ağlar sıfır kontrol noktasına sahip?
Bazı OBJ grupları, konum verisi olmadan yalnızca doku koordinatları veya normaller tanımlar. Kontrol edin mesh.controlPoints.length > 0 işleme öncesinde.
Kütüphane ayrıştırma hatalarını sessizce yok sayar. Bunları nasıl tespit edebilirim?
Sarı scene.open() bir try/catch bloğu içinde. 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);
}