Učitavanje 3D modela
@aspose/3d pruža dva načina učitavanja na Scene klasu: open() za učitavanje putem putanje do fajla i openFromBuffer() za podatke u memoriji. Detekcija formata je automatska na osnovu binarnih magičnih brojeva ili ekstenzije fajla, tako da retko morate eksplicitno navesti format izvora.
Učitavanje iz putanje do fajla
Prosledite string putanje fajla funkciji scene.open(). Biblioteka detektuje format iz ekstenzije fajla i, za binarne formate, iz magičnih bajtova:
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() zamenjuje sav postojeći sadržaj scene. Ako treba da učitate više fajlova, kreirajte odvojene Scene instance.
Učitavanje OBJ-a sa materijalima
OBJ fajlovi referišu materijale kroz sidecar fajl. Učitavanje materijala je .mtl omogućeno podrazumevano ) (ObjLoadOptions.enableMaterials = trueProsledite ObjLoadOptions da biste kontrolisali ovo i druge opcije pri učitavanju:
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}`);
}Učitavanje iz bafera
Koristite openFromBuffer() kada su podaci fajla već u memoriji, na primer iz HTTP zahteva, BLOB‑a u bazi podataka ili ekstrakcije iz zip arhive. Ovo izbegava upis na disk:
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`);Za binarne formate (GLB, STL binary, 3MF), biblioteka čita magične bajtove iz bafera kako bi automatski otkrila format, tako da možete proslediti undefined kao argument opcija:
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
Učitavanje iz HTTP-a (Node.js 18+)
Preuzmite udaljeni resurs i učitajte ga bez pristupa fajl sistemu:
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`);Pregled učitane scene
Nakon učitavanja, prođite kroz graf scene da izlistate čvorove i identifikujete geometriju:
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);Čitanje metapodataka resursa
The assetInfo svojstvo izlaže metapodatke na nivou fajla:
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}`);
}Nisu svi formati popunjeni assetInfo. FBX i COLLADA imaju bogate metapodatke; OBJ i STL obično ih nemaju.
Referenca za specifične opcije učitavanja formata
| Format | Klasa Opcija | Put uvoza | Ključne opcije |
|---|---|---|---|
| OBJ | ObjLoadOptions | @aspose/3d/formats/obj | enableMaterials, flipCoordinateSystem, scale, normalizeNormal |
| glTF / GLB | (nije potrebno) | N/A | Automatski otkriveno; nije potrebna klasa opcija |
| STL | StlLoadOptions | @aspose/3d/formats/stl | (nema konfigurabilnih opcija u trenutnoj verziji) |
| FBX | FbxLoadOptions | @aspose/3d/formats/fbx | (nema konfigurabilnih opcija u trenutnoj verziji) |
| COLLADA | ColladaLoadOptions | @aspose/3d/formats/collada | (nema konfigurabilnih opcija u trenutnoj verziji) |
| 3MF | (nije potrebno) | N/A | Automatski otkriveno |
Uobičajene greške pri učitavanju
| Simptom | Uzrok | Rešenje |
|---|---|---|
Error: Cannot find module '@aspose/3d/formats/obj' | moduleResolution nije postavljeno na node | Dodaj "moduleResolution": "node" na tsconfig.json |
| Prazna lista čvorova nakon učitavanja OBJ | .mtl nedostaje sidecar ili enableMaterials nije postavljeno | Postavi options.enableMaterials = true i osiguraj .mtl je u istom direktorijumu |
Scena se učitava, ali rootNode.childNodes je prazna | Format koristi jedan korenski mesh, a ne podređene čvorove | Pristup scene.rootNode.entity direktno |
openFromBuffer baci grešku sa binary STL | Buffer je isečen nepravilno (nedostaju završni bajtovi) | Koristite pun readFileSync() output bez sečenja |
| Animation clips array je prazan nakon FBX učitavanja | FBX file koristi baked transforms, a ne clips | Animacija se obrađuje po frejmu; niz klipova će biti prazan |
Vidi takođe
- Čuvanje 3D modela: opcije izvoza i
saveToBuffer - Graf scene: prelazak i izmena hijerarhije čvorova
- Pregled API-ja: sve klase i enumeracije
- Podrška za formate: kompletna matrica za čitanje/pisanje