Naložení 3D modelů
@aspose/3d poskytuje dva způsoby nakládání na Scene třída: open() pro načtení cesty souboru a openFromBuffer() Pro data v paměti je detekce formátu automatická z binárních magických čísel nebo rozšíření souboru, takže málokdy potřebujete výslovně určit zdrojový format.
Naložení ze cesty souboru
Přeneste řetěz cesty souboru na: scene.open().Knihovna detekuje formát z rozšíření souboru a u binárních formátu ze magických bajtů:
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}`);Omezení FBX: Podpora FBX je omezená pouze na import ASCII FBx. Binární FB X zatím není podporován. FB x také není propojen s automatickým detekcí formátu, takže načtení může vyžadovat explicitní
FbxLoadOptions.Pro spolehlivé načítání modelu použijte formáty OBJ, STL nebo glTF.
open() nahrazuje jakýkoli stávající obsah scény. Pokud potřebujete načíst více souborů, vytvořit samostatné Scene příklady.
Naložení materiálu na OBJ
OBJ soubory referenčních materiálů prostřednictvím boční vozidlo .mtl Materiálové nakládání je: Předvolně aktivováno (ObjLoadOptions.enableMaterials = true) Projít. ObjLoadOptions ovládání tohoto a dalších možností načítání:
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}`);
}Naložení z nárazníku
Použití: openFromBuffer() když jsou data souboru již v paměti, například z HTTP přívodu, datové báze BLOB nebo zip archivu extrakce. To se vyhýbá psaní 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`);Pro binární formáty (GLB, STL binární, 3MF), knihovna čte magické bajty z paměťového systému pro automatické detekci formátu, takže můžete převést undefined jako argument pro opce:
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
Naložení z HTTP (Node.js 18+)
Přineste vzdálený zdroj a naložte ho bez dotýkání souborového systému:
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`);Inspekce plné scény
Po načtení projděte grafickým grafem scény, abyste vyčíslili uzly a identifikovali geometrii:
import { Scene, Mesh, Node } from '@aspose/3d';
const scene = new Scene();
scene.open('model.fbx'); // ASCII FBX only; see FBX limitation note above
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);Čtení metadat aktiv
Úřad pro bezpečnost a ochranu zdraví assetInfo vlastnost odhaluje metadata na úrovni souboru:
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.fbx'); // ASCII FBX only
const info = scene.assetInfo;
if (info) {
console.log(`Creator: ${info.creator}`);
console.log(`Unit name: ${info.unitName}`);
console.log(`Unit scale: ${info.unitScaleFactor}`);
}Ne všechny formáty jsou splněny. assetInfo.FBX a COLLADA mají bohaté metadata; OBJ a STL obvykle ne.
Reference pro možnosti načítání specifické pro formát
| Formát | Klasifikace | Cesta na import | Klíčové možnosti |
|---|---|---|---|
| OBJ | ObjLoadOptions | @aspose/3d/formats/obj | enableMaterials, flipCoordinateSystem, scale, normalizeNormal |
| glTF | (nevyžaduje se) | N/A | Auto-detekce; pokrývá jak glTF JSON a GLB binární |
| STL | StlLoadOptions | @aspose/3d/formats/stl | (v současné verzi nejsou možné žádné konfigurační možnosti) |
| FBX | FbxLoadOptions | @aspose/3d/formats/fbx | Pouze ASCII FBX; binární FBx není podporován. Neautodetectovaný projde FbxLoadOptions - Jasně. |
| COLLADA | ColladaLoadOptions | @aspose/3d/formats/collada | (v současné verzi nejsou možné žádné konfigurační možnosti) |
| 3MF | (nevyžaduje se) | N/A | Automaticky detekované |
Všechny formáty podporují automatické detekci z rozšíření souboru; projděte speciálními variantami pouze tehdy, když potřebujete non-default chování.
Časté chyby při načtení
| Příznak: | Příčina: | Opravy |
|---|---|---|
Error: Cannot find module '@aspose/3d/formats/obj' | moduleResolution není nastaven na: node | Přidání: "moduleResolution": "node" na … tsconfig.json |
| Prázdný seznam uzlů po načtení OBJ | .mtl chybí boční vozík nebo enableMaterials Nevyhodněné | Sestavení: options.enableMaterials = true a zajistit, aby se .mtl je ve stejném adresáři. |
Scéna je plná, ale… rootNode.childNodes je prázdný. | Formát používá jediný kořenový sítí, ne dětmi uzlů | Přístup scene.rootNode.entity přímo |
openFromBuffer hodí s binárním STL | Buffer byl nesprávně rozdělen (chybí sledující bajty) | Použijte plnou. readFileSync() výstup bez řezání |
| Array animačních klipů je po načtení FBX prázdný . | FBX soubor používá pečené transformy, ne klipy. | Animování je pečené na rámeček; soubor klipů bude prázdný |
| Soubor FBX se nevyhledává nebo vytváří prázdnou scénu . | Binární FBX není podporován | Konverze na ASCII FBX nebo místo toho použití glTF/OBJ/STL. |
Viz také:
- Uložení 3D modelů:Vývozný výběr a
saveToBuffer - Graf scény: procházení a úprava hierarchie uzlů
- Přehled API: všechny třídy a výčty
- Podpora formátu: kompletní matrice čtení/psaní