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çimSeçenekler Sınıfıİçe Aktarma YoluAnahtar Seçenekler
OBJObjLoadOptions@aspose/3d/formats/objenableMaterials, flipCoordinateSystem, scale, normalizeNormal
glTF / GLB(gereken yok)N/AOtomatik algılandı; seçenek sınıfına gerek yok
STLStlLoadOptions@aspose/3d/formats/stl(mevcut sürümde yapılandırılabilir seçenek yok)
FBXFbxLoadOptions@aspose/3d/formats/fbx(mevcut sürümde yapılandırılabilir seçenek yok)
COLLADAColladaLoadOptions@aspose/3d/formats/collada(mevcut sürümde yapılandırılabilir seçenek yok)
3MF(gereken yok)N/AOtomatik algılandı

Yaygın Yükleme Hataları

SemptomNedenDüzeltme
Error: Cannot find module '@aspose/3d/formats/obj'moduleResolution ayarlanmamış nodeEkle "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ğilErişim scene.rootNode.entity doğrudan
openFromBuffer binary STL ile hata fırlatırArabellek 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ğilAnimasyon kare başına pişirilir; klip dizisi boş olacaktır

Ayrıca Bakınız

 Türkçe