3D Biçim Desteği
Aspose.3D FOSS for TypeScript yedi ana 3D dosya formatını okur ve yazar. Format algılaması yükleme sırasında otomatik olur: kütüphane ikili sihirli sayıları inceler, böylece kaynak formatı belirtmeniz gerekmez. Format‑özel seçenek sınıfları paketin alt yollarından içe aktarılır the @aspose/3d paket.
Desteklenen Formatlar
| Biçim | Uzantı | Okuma | Yazma | Biçim Sınıfı | Notlar |
|---|---|---|---|---|---|
| Wavefront OBJ | .obj | Evet | Evet | ObjFormat | Okur .mtl malzemeler; yazar .mtl yanında .obj |
| glTF 2.0 | .gltf | Evet | Evet | GltfFormat | JSON metni + .bin sidecar |
| GLB | .glb | Evet | Evet | GltfFormat | Binary glTF; ayarlandı binaryMode = true |
| STL | .stl | Evet | Evet | StlFormat | Binary ve ASCII modları |
| 3MF | .3mf | Evet | Evet | ThreeMfFormat | 3D Manufacturing Format |
| FBX | .fbx | Hayır* | Hayır* | FbxFormat | Importer/exporter mevcut ancak format auto-detection bağlanmadı; üzerinden kullanılamaz scene.open() |
| COLLADA | .dae | Evet | Evet | ColladaFormat | Gerektirir xmldom (otomatik kurulur) |
OBJ (Wavefront)
OBJ, hem içe aktarma hem dışa aktarmayı destekler @aspose/3d. OBJ olarak kaydederken, malzeme kütüphanesi (.mtl) otomatik olarak yanına yazılır .obj dosya. Kullan ObjLoadOptions malzeme yüklemesini ve koordinat sistemi davranışını kontrol etmek için.
İçin anahtar seçenekler ObjLoadOptions:
| Seçenek | Tür | Varsayılan | Etki |
|---|---|---|---|
enableMaterials | boolean | true | Ayrıştır .mtl tarafından referans verilen dosya mtllib |
flipCoordinateSystem | boolean | false | Y/Z eksenlerini sağ el sistemleriyle eşleşecek şekilde ters çevir |
scale | number | 1.0 | Yükleme sırasında tüm köşelere uygulanan tekdüze ölçek |
normalizeNormal | boolean | true | Köşe normallerini birim uzunluğa normalize et |
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
const opts = new ObjLoadOptions();
opts.enableMaterials = true;
opts.normalizeNormal = true;
scene.open('model.obj', opts);
console.log(`Loaded ${scene.rootNode.childNodes.length} top-level node(s)`);Bir OBJ’yi herhangi bir yazılabilir formata dönüştürmek için, onu yükleyin ve şu komutu çağırın scene.save() hedef format sınıfı ile.
glTF ve GLB
glTF 2.0, web ve oyun motoru kullanımı için önerilen değişim formatıdır. Kütüphane aynı GltfFormat sınıfı hem .gltf (JSON + yan dosya) ve .glb (ikili, tek dosya) çıktı. Aralarında geçiş yapmak için GltfSaveOptions.binaryMode.
glTF veya GLB yükle:
import { Scene } from '@aspose/3d';
import { GltfLoadOptions } from '@aspose/3d/formats/gltf';
const scene = new Scene();
scene.open('model.gltf', new GltfLoadOptions());
// or
scene.open('model.glb'); // format detected from magic bytes
JSON glTF olarak dışa aktar (.gltf + .bin):
import { Scene } from '@aspose/3d';
import { GltfSaveOptions, GltfFormat } from '@aspose/3d/formats/gltf';
const scene = new Scene();
scene.open('input.fbx');
const opts = new GltfSaveOptions();
opts.binaryMode = false; // produces output.gltf + output.bin
scene.save('output.gltf', GltfFormat.getInstance(), opts);İkili GLB olarak dışa aktar (.glb):
import { Scene } from '@aspose/3d';
import { GltfSaveOptions, GltfFormat } from '@aspose/3d/formats/gltf';
const scene = new Scene();
scene.open('input.obj');
const opts = new GltfSaveOptions();
opts.binaryMode = true; // single self-contained file
scene.save('output.glb', GltfFormat.getInstance(), opts);Kullan binaryMode = true üretim varlık teslimi için. Tek bir .glb tarayıcılarda ve motorlarda bölünmüş metin + ikili çiftine göre daha hızlı yüklenir.
STL
STL, CAD ve 3D baskıda kullanılan üçgenleştirilmiş bir ağ (mesh) formatıdır. Giriş ve çıkış için hem ikili hem de ASCII STL desteklenir. StlSaveOptions.binaryMode çıkışın ikili (kompakt) mi yoksa ASCII (insan tarafından okunabilir) mi olacağını kontrol eder.
import { Scene } from '@aspose/3d';
import { StlLoadOptions, StlSaveOptions } from '@aspose/3d/formats/stl';
const scene = new Scene();
scene.open('model.stl', new StlLoadOptions());
// Export as binary STL (default, compact)
const binaryOpts = new StlSaveOptions();
binaryOpts.binaryMode = true;
scene.save('output_binary.stl', binaryOpts);
// Export as ASCII STL (human-readable)
const asciiOpts = new StlSaveOptions();
asciiOpts.binaryMode = false;
scene.save('output_ascii.stl', asciiOpts);STL yalnızca üçgenleştirilmiş geometriyi ve tepe nokta normallerini depolar. Malzeme ve UV verileri STL’de korunmaz.
3MF (3D Manufacturing Format)
3MF is an XML-based format designed for additive manufacturing. It supports color and material metadata alongside geometry. Use it when exchanging files with 3D printing slicers or manufacturing workflows.
import { Scene } from '@aspose/3d';
import { ThreeMfSaveOptions } from '@aspose/3d/formats/3mf';
const scene = new Scene();
scene.open('model.3mf');
// Re-export as 3MF
scene.save('output.3mf', new ThreeMfSaveOptions());3MF files are ZIP archives internally. The library handles archive creation and extraction automatically.
FBX
Uyarı: FBX içe aktarma ve dışa aktarma sınıfları (FbxImporter, FbxExporter) kütüphanede mevcut, ancak FBX formatı otomatik algılama bağlanmamış içine scene.open() veya scene.save(). Çağırarak scene.open('file.fbx') FBX içe aktarıcısını tetiklemez — dosya STL geri dönüşüne düşer. scene.save('output.fbx', opts) FBX dışa aktarıcısını tetiklemez. Yukarıdaki format destek tablosu FBX’i şu şekilde işaretler No* Bu nedenle. Tam işlevsel içe ve dışa aktarma için GLB veya COLLADA kullanın scene.open() / scene.save().
COLLADA (DAE)
COLLADA, geniş bir DCC araç yelpazesi (Blender, Maya, Cinema 4D) tarafından desteklenen XML tabanlı bir değişim formatıdır. Kütüphane xmldom XML ayrıştırması için bağımlılığı kullanır; bu, otomatik olarak npm install @aspose/3d.
import { Scene } from '@aspose/3d';
import { ColladaSaveOptions } from '@aspose/3d/formats/collada';
const scene = new Scene();
scene.open('model.dae');
// Re-export as COLLADA
const saveOpts = new ColladaSaveOptions();
scene.save('output.dae', saveOpts);COLLADA dosyaları birim ölçekleme meta verisi içerebilir (<unit> öğesi). Kütüphane, yükleme sırasında birim dönüşümünü otomatik olarak uygular.
Format Otomatik Algılama
Bir dosya yolundan yükleme yaparken, kütüphane dosya uzantısına geri dönmeden önce ikili sihirli sayılardan format tespiti yapmaya çalışır. Bu, adlandırılmış bir GLB dosyasını yükleyebileceğiniz anlamına gelir .bin veya adlandırılmış bir STL dosyası .model formatı açıkça belirtmeden.
Bir yerden yükleme yaparken Buffer ile scene.openFromBuffer(), magic-number tespiti birincil mekanizmadır:
import { Scene } from '@aspose/3d';
import * as fs from 'fs';
const buffer = fs.readFileSync('model.glb');
const scene = new Scene();
scene.openFromBuffer(buffer); // format detected from magic bytes: 'glTF'
console.log(`Root has ${scene.rootNode.childNodes.length} child node(s)`);Güvenilir magic-number’lara sahip formatlar: GLB (glTF), STL ikili (80 bayt başlık + üçgen sayısı), 3MF (ZIP magic PK). OBJ ve COLLADA metin tabanlıdır ve dosya uzantısından ya da gönderdiğiniz seçenek sınıfı aracılığıyla tespit edilir.
İpuçları
- OBJ hem içe aktarmayı hem de dışa aktarmayı destekler: OBJ olarak kaydederken,
.mtlmalzeme dosyası otomatik olarak yanına yazılır.objdosyanın. - Web teslimi için GLB kullanın: kendi içinde barındırılan ikili format, CORS sorunlarını önler
.binsidecar’lar ve WebGL renderlayıcılarında daha hızlı yüklenir. - Biçime özgü seçenekleri iletin: genel
scene.open(path)çoğu format için çalışır, ancak yükleyici seçenekleri sınıfını geçirerek OBJ malzeme yüklemesi veya STL koordinat normalizasyonu gibi biçim‑özel davranışlar etkinleştirilir. xmldomCOLLADA için gereklidir: otomatik olarak kurulur. Bunu eklemeyinpeerDependenciesveya kaldırmaya çalışmayın; COLLADA okuyucusu doğrudan çağırır.
Yaygın Sorunlar
| Semptom | Muhtemel Neden | Düzelt |
|---|---|---|
| OBJ malzemeleri yüklendikten sonra boş | enableMaterials ayarlanmamış | Geç ObjLoadOptions ile enableMaterials = true |
GLB bir .bin sidecar | binaryMode varsayılan olarak false | Ayarla opts.binaryMode = true içinde GltfSaveOptions |
scene.open() “unsupported format” hatası verir | Dosya uzantısı tanınmadı | Eşleşeni ilet *LoadOptions sınıfı veya kullan openFromBuffer() |
| COLLADA yüklemesi XML hatasıyla başarısız oluyor | xmldom eksik veya eşleşmeyen | Çalıştır npm install @aspose/3d tekrar; xmldom doğrudan bir bağımlılıktır |
| STL normalleri ASCII dışa aktarmada kayboldu | ASCII STL, yüzey başına normal vektörlerini atar | Kullan binaryMode = true normal koruyan çıktı için |
Ayrıca Bakınız
- Özellikler ve İşlevler: sahne grafiği, ağ, malzemeler, animasyon ve matematik API’leri.
- Sahne Grafiği: düğüm ağacını oluşturma ve dolaşma.
- 3D Mesh’i Programlı Olarak Nasıl Oluşturulur