3B Modelleri Yükleme
@aspose/3d iki yükleme yöntemi sağlar Scene sınıf: open() dosya yolu yüklemesi için ve openFromBuffer() bellek içi veri için. Biçim algılaması, ikili sihirli sayılar veya dosya uzantısı üzerinden otomatik yapılır, bu yüzden kaynak biçimini açıkça belirtmeniz nadiren gerekir.
Dosya Yolundan Yükleme
Dosya yolu dizesini şuraya gönderin: scene.open(). Kütüphane, dosya uzantısından ve ikili biçimler için sihirli baytlardan biçimi algılar:
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.fbx');
console.log(`Root children: ${scene.rootNode.childNodes.length}`);
console.log(`Animation clips: ${scene.animationClips.length}`);open() mevcut sahne içeriğini değiştirir. Birden fazla dosya yüklemeniz gerekiyorsa, ayrı Scene örnekler oluşturun.
Materyallerle OBJ Yükleme
OBJ dosyaları, yan dosya aracılığıyla malzemelere referans verir .mtl dosya. Malzeme yükleme varsayılan olarak etkindir (ObjLoadOptions.enableMaterials = true). Geçirin ObjLoadOptions bunu ve diğer yükleme zamanı seçeneklerini kontrol etmek için:
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
const options = new ObjLoadOptions();
options.enableMaterials = true; // load the .mtl sidecar
options.flipCoordinateSystem = false; // keep original Y-up orientation
options.normalizeNormal = true; // fix degenerate normals
options.scale = 1.0; // unit scale multiplier
scene.open('character.obj', options);
// Inspect materials on the first node
const first = scene.rootNode.childNodes[0];
if (first) {
console.log(`Materials on ${first.name}: ${first.materials.length}`);
}Arabellekten Yükleme
Kullan openFromBuffer() dosya verisi zaten bellekte olduğunda, örneğin bir HTTP isteği, bir veritabanı BLOB’u veya bir zip arşivi çıkarımıyla. Bu, diske yazmayı önler:
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
import * as fs from 'fs';
const buffer: Buffer = fs.readFileSync('model.obj');
const scene = new Scene();
const options = new ObjLoadOptions();
options.enableMaterials = true;
scene.openFromBuffer(buffer, options);
console.log(`Loaded ${scene.rootNode.childNodes.length} root nodes`);İkili biçimler (GLB, STL binary, 3MF) için, kütüphane biçimi otomatik olarak algılamak üzere tampondan sihirli baytları okur, böylece şunu geçirebilirsiniz undefined seçenekler argümanı olarak:
import { Scene } from '@aspose/3d';
import * as fs from 'fs';
const glbBuffer: Buffer = fs.readFileSync('model.glb');
const scene = new Scene();
scene.openFromBuffer(glbBuffer); // format auto-detected from GLB magic bytes
HTTP’den Yükleme (Node.js 18+)
Uzak bir varlığı alıp dosya sistemine dokunmadan yükleyin:
import { Scene } from '@aspose/3d';
async function loadFromUrl(url: string): Promise<Scene> {
const response = await fetch(url);
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const arrayBuffer = await response.arrayBuffer();
const buffer = Buffer.from(arrayBuffer);
const scene = new Scene();
scene.openFromBuffer(buffer);
return scene;
}
const scene = await loadFromUrl('https://example.com/model.glb');
console.log(`Loaded scene: ${scene.rootNode.childNodes.length} root nodes`);Yüklenen Sahneyi İnceleme
Yüklemeden sonra, düğümleri listelemek ve geometriyi tanımlamak için sahne grafiğinde dolaşın:
import { Scene, Mesh, Node } from '@aspose/3d';
const scene = new Scene();
scene.open('model.fbx');
function inspect(node: Node, depth: number = 0): void {
const indent = ' '.repeat(depth);
const entityType = node.entity ? node.entity.constructor.name : '(none)';
console.log(`${indent}${node.name} [${entityType}]`);
if (node.entity instanceof Mesh) {
const mesh = node.entity as Mesh;
console.log(`${indent} vertices: ${mesh.controlPoints.length}, polygons: ${mesh.polygonCount}`);
}
for (const child of node.childNodes) {
inspect(child, depth + 1);
}
}
inspect(scene.rootNode);Varlık Metaverisini Okuma
Bu assetInfo özellik dosya düzeyinde meta verileri gösterir:
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.fbx');
const info = scene.assetInfo;
if (info) {
console.log(`Creator: ${info.creator}`);
console.log(`Unit name: ${info.unitName}`);
console.log(`Unit scale: ${info.unitScaleFactor}`);
}Tüm formatlar doldurmaz assetInfo. FBX ve COLLADA zengin meta verilere sahiptir; OBJ ve STL genellikle sahip değildir.
Biçim-Özel Yükleme Seçenekleri Referansı
| Biçim | Seçenekler Sınıfı | İçe Aktarma Yolu | Anahtar Seçenekler |
|---|---|---|---|
| OBJ | ObjLoadOptions | @aspose/3d/formats/obj | enableMaterials, flipCoordinateSystem, scale, normalizeNormal |
| glTF / GLB | (gereken yok) | N/A | Otomatik algılandı; seçenek sınıfına gerek yok |
| STL | StlLoadOptions | @aspose/3d/formats/stl | (mevcut sürümde yapılandırılabilir seçenek yok) |
| FBX | FbxLoadOptions | @aspose/3d/formats/fbx | (mevcut sürümde yapılandırılabilir seçenek yok) |
| COLLADA | ColladaLoadOptions | @aspose/3d/formats/collada | (mevcut sürümde yapılandırılabilir seçenek yok) |
| 3MF | (gereken yok) | N/A | Otomatik algılandı |
Yaygın Yükleme Hataları
| Semptom | Neden | Düzeltme |
|---|---|---|
Error: Cannot find module '@aspose/3d/formats/obj' | moduleResolution ayarlanmamış node | Ekle "moduleResolution": "node" için tsconfig.json |
| OBJ yükledikten sonra boş düğüm listesi | .mtl sidecar eksik veya enableMaterials ayarlanmamış | Ayarla options.enableMaterials = true ve emin olun .mtl aynı dizinde |
Sahne yükleniyor ancak rootNode.childNodes boş | Biçim tek bir kök mesh kullanır, alt düğümler değil | Erişim scene.rootNode.entity doğrudan |
openFromBuffer binary STL ile hata fırlatır | Arabellek yanlış dilimlendi (son baytlar eksik) | Tam olanı kullan readFileSync() dilimlemeden çıktı |
| Animasyon klipleri dizisi FBX yüklemesinden sonra boş | FBX dosyası pişmiş dönüşümler kullanır, klipler değil | Animasyon kare başına pişirilir; klip dizisi boş olacaktır |
Ayrıca Bakınız
- 3D Modelleri Kaydetme: dışa aktarma seçenekleri ve
saveToBuffer - Sahne Grafiği: düğüm hiyerarşisini dolaşma ve değiştirme
- API Genel Bakışı: tüm sınıflar ve enumerasyonlar
- Biçim Desteği: tam okuma/yazma matrisi