Načítání 3D modelů
@aspose/3d poskytuje dvě metody načítání na Scene třídě: open() pro načítání ze souborové cesty a openFromBuffer() pro data v paměti. Detekce formátu je automatická na základě binárních magických čísel nebo přípony souboru, takže zřídka musíte explicitně uvádět formát zdroje.
Načítání z cesty k souboru
Předávejte řetězec s cestou k souboru do scene.open(). Knihovna detekuje formát z přípony souboru a u binárních formátů také z 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}`);open() nahrazuje veškerý existující obsah scény. Pokud potřebujete načíst více souborů, vytvořte samostatné Scene instance.
Načítání OBJ s materiály
Soubory OBJ odkazují na materiály prostřednictvím doprovodného .mtl souboru. Načítání materiálů je ve výchozím nastavení povoleno (ObjLoadOptions.enableMaterials = true). Předávejte ObjLoadOptions pro řízení 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}`);
}Načítání z bufferu
Použijte openFromBuffer() když jsou data souboru již v paměti, například z HTTP požadavku, BLOBu v databázi nebo po rozbalení zip archivu. Tím se vyhnete zápisu 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`);U binárních formátů (GLB, STL binary, 3MF) knihovna čte magické bajty z bufferu a automaticky detekuje formát, takže můžete předat undefined jako argument options:
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
Načítání z HTTP (Node.js 18+)
Načtěte vzdálený asset a načtěte jej, aniž byste se dotkli 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`);Prohlížení načtené scény
Po načtení projděte graf scény, abyste vyjmenovali uzly a identifikovali geometrii:
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);Čtení metadat assetu
Ten assetInfo vlastnost zpřístupňuje metadata na úrovni souboru:
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}`);
}Ne všechny formáty vyplňují assetInfo. FBX a COLLADA mají bohatá metadata; OBJ a STL je obvykle nemají.
Reference k možnostem načítání specifickým pro formát
| Formát | Třída možností | Cesta importu | Klíčové možnosti |
|---|---|---|---|
| OBJ | ObjLoadOptions | @aspose/3d/formats/obj | enableMaterials, flipCoordinateSystem, scale, normalizeNormal |
| glTF / GLB | (není vyžadováno) | N/A | Automaticky detekováno; třída možností není potřeba |
| STL | StlLoadOptions | @aspose/3d/formats/stl | (v aktuální verzi nejsou konfigurovatelné možnosti) |
| FBX | FbxLoadOptions | @aspose/3d/formats/fbx | (v aktuální verzi nejsou konfigurovatelné možnosti) |
| COLLADA | ColladaLoadOptions | @aspose/3d/formats/collada | (v aktuální verzi nejsou konfigurovatelné možnosti) |
| 3MF | (není vyžadováno) | N/A | Automaticky detekováno |
Běžné chyby při načítání
| Příznak | Příčina | Oprava |
|---|---|---|
Error: Cannot find module '@aspose/3d/formats/obj' | moduleResolution není nastaveno na node | Přidat "moduleResolution": "node" do tsconfig.json |
| Prázdný seznam uzlů po načtení OBJ | .mtl vedlejší soubor chybí nebo enableMaterials není nastaveno | Nastavit options.enableMaterials = true a zajistěte .mtl je ve stejném adresáři |
Scéna se načte, ale rootNode.childNodes je prázdná | Formát používá jedinou kořenovou síť, ne podřízené uzly | Přístup scene.rootNode.entity přímo |
openFromBuffer vyhazuje při binárním STL | Buffer byl nesprávně oříznut (chybí koncové bajty) | Použijte celý readFileSync() výstup bez ořezávání |
| Pole animačních klipů je po načtení FBX prázdné | Soubor FBX používá předpočítané transformace, ne klipy | Animace je zapečena po snímku; pole klipů bude prázdné |
Viz také
- Ukládání 3D modelů: možnosti exportu a
saveToBuffer - Graf scény: procházení a úprava hierarchie uzlů
- Přehled API: všechny třídy a výčty
- Podpora formátů: kompletní matice čtení/zápisu