3D modellek betöltése

@aspose/3d két betöltési módszert biztosít a Scene osztály: open() fájlútvonal betöltéshez és openFromBuffer() memóriában lévő adatokhoz. A formátumdetektálás automatikus a bináris varázsszámok vagy a fájlkiterjesztés alapján, így ritkán kell explicit módon megadni a forrásformátumot.

Betöltés fájlútvonalról

Add meg a fájlútvonal karakterláncot a scene.open(). A könyvtár a formátumot a fájlkiterjesztésből, bináris formátumok esetén pedig a varázsbyte‑okból észleli:

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() felülírja a meglévő jelenet tartalmát. Ha több fájlt kell betölteni, hozz létre külön Scene példányokat.

OBJ betöltése anyagokkal

OBJ fájlok anyagokra hivatkoznak egy sidecar .mtl fájlban. Az anyagbetöltés alapértelmezés szerint engedélyezve (ObjLoadOptions.enableMaterials = true). Add ObjLoadOptions ezzel és más betöltési beállítások vezérléséhez:

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

Betöltés bufferből

Használd openFromBuffer() ha a fájl adatai már a memóriában vannak, például egy HTTP lekérdezésből, adatbázis BLOB‑ból vagy zip archívum kicsomagolásából. Ez elkerüli a lemezre írást:

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

Bináris formátumok (GLB, STL binary, 3MF) esetén a könyvtár a varázsbyte‑okat olvassa a pufferből a formátum automatikus felismeréséhez, így átadhatod undefined az opciók argumentumaként:

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

Betöltés HTTP-ről (Node.js 18+)

Hozzon be egy távoli eszközt, és töltse be anélkül, hogy a fájlrendszert érintené:

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

A betöltött jelenet vizsgálata

Betöltés után járja be a jelenet gráfját a csomópontok felsorolásához és a geometria azonosításához:

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

Eszköz metaadatok olvasása

A assetInfo a tulajdonság fájlszintű metaadatokat tesz elérhetővé:

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

Nem minden formátum tölti ki assetInfo. FBX és a COLLADA gazdag metaadatokkal rendelkezik; az OBJ és az STL általában nem.

Formátum-specifikus betöltési opciók hivatkozása

FormátumBeállítások osztályaImportálási útvonalKulcsfontosságú beállítások
OBJObjLoadOptions@aspose/3d/formats/objenableMaterials, flipCoordinateSystem, scale, normalizeNormal
glTF / GLB(nincs szükség)N/AAutomatikusan felismert; nincs szükség beállítások osztályra
STLStlLoadOptions@aspose/3d/formats/stl(nincs konfigurálható beállítás a jelenlegi verzióban)
FBXFbxLoadOptions@aspose/3d/formats/fbx(nincs konfigurálható beállítás a jelenlegi verzióban)
COLLADAColladaLoadOptions@aspose/3d/formats/collada(nincs konfigurálható beállítás a jelenlegi verzióban)
3MF(nincs szükség)N/AAutomatikusan felismert

Gyakori betöltési hibák

TünetOkJavítás
Error: Cannot find module '@aspose/3d/formats/obj'moduleResolution nincs beállítva nodeHozzáadás "moduleResolution": "node" cél tsconfig.json
Üres csomópontlista az OBJ betöltése után.mtl a sidecar hiányzik vagy enableMaterials nincs beállítvaBeállítás options.enableMaterials = true és győződjön meg róla .mtl az ugyanabban a könyvtárban van
A jelenet betöltődik, de rootNode.childNodes üresA formátum egyetlen gyökér hálót használ, nem gyermek csomópontokatHozzáférés scene.rootNode.entity közvetlenül
openFromBuffer hibát dob bináris STL eseténA puffer helytelenül lett szeletelve (hiányzó záró bájtok)Használja a teljes readFileSync() kimenetet szeletelés nélkül
Az animációs klipek tömbje üres az FBX betöltése utánAz FBX fájl beégetett transzformációkat használ, nem klipeketAz animáció képkockánként előre ki van számítva; a klip tömb üres lesz

Lásd még

 Magyar