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átKlasifikaceCesta na importKlíčové možnosti
OBJObjLoadOptions@aspose/3d/formats/objenableMaterials, flipCoordinateSystem, scale, normalizeNormal
glTF(nevyžaduje se)N/AAuto-detekce; pokrývá jak glTF JSON a GLB binární
STLStlLoadOptions@aspose/3d/formats/stl(v současné verzi nejsou možné žádné konfigurační možnosti)
FBXFbxLoadOptions@aspose/3d/formats/fbxPouze ASCII FBX; binární FBx není podporován. Neautodetectovaný projde FbxLoadOptions - Jasně.
COLLADAColladaLoadOptions@aspose/3d/formats/collada(v současné verzi nejsou možné žádné konfigurační možnosti)
3MF(nevyžaduje se)N/AAutomaticky 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: nodePř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 STLBuffer 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ánKonverze na ASCII FBX nebo místo toho použití glTF/OBJ/STL.

Viz také:

 Čeština