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átum | Beállítások osztálya | Importálási útvonal | Kulcsfontosságú beállítások |
|---|---|---|---|
| OBJ | ObjLoadOptions | @aspose/3d/formats/obj | enableMaterials, flipCoordinateSystem, scale, normalizeNormal |
| glTF / GLB | (nincs szükség) | N/A | Automatikusan felismert; nincs szükség beállítások osztályra |
| STL | StlLoadOptions | @aspose/3d/formats/stl | (nincs konfigurálható beállítás a jelenlegi verzióban) |
| FBX | FbxLoadOptions | @aspose/3d/formats/fbx | (nincs konfigurálható beállítás a jelenlegi verzióban) |
| COLLADA | ColladaLoadOptions | @aspose/3d/formats/collada | (nincs konfigurálható beállítás a jelenlegi verzióban) |
| 3MF | (nincs szükség) | N/A | Automatikusan felismert |
Gyakori betöltési hibák
| Tünet | Ok | Javítás |
|---|---|---|
Error: Cannot find module '@aspose/3d/formats/obj' | moduleResolution nincs beállítva node | Hozzá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ítva | Beá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 üres | A formátum egyetlen gyökér hálót használ, nem gyermek csomópontokat | Hozzáférés scene.rootNode.entity közvetlenül |
openFromBuffer hibát dob bináris STL esetén | A 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án | Az FBX fájl beégetett transzformációkat használ, nem klipeket | Az animáció képkockánként előre ki van számítva; a klip tömb üres lesz |
Lásd még
- 3D modellek mentése: exportálási beállítások és
saveToBuffer - Jelenet gráf: a node hierarchy bejárása és módosítása
- API áttekintés: összes osztály és felsorolás
- Formátumtámogatás: teljes olvasás/írás mátrix