Načítanie 3D modelov

@aspose/3d poskytuje dva spôsoby načítania na Scene triede: open() pre načítanie z cesty k súboru a openFromBuffer() pre dáta v pamäti. Detekcia formátu je automatická na základe binárnych magických čísel alebo prípony súboru, takže zriedkavo musíte explicitne uvádzať formát zdroja.

Načítanie z cesty k súboru

Preveďte reťazec cesty k súboru do scene.open(). Knižnica detekuje formát z prípony súboru a pre binárne formáty aj z magických bajtov:

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() nahradí akýkoľvek existujúci obsah scény. Ak potrebujete načítať viacero súborov, vytvorte samostatné Scene inštancie.

Načítanie OBJ s materiálmi

Súbory OBJ odkazujú na materiály prostredníctvom pomocného .mtl súboru. Načítanie materiálov je predvolene povolené (ObjLoadOptions.enableMaterials = true). Preveďte ObjLoadOptions na ovládanie tohto a ďalších možností načítania:

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čítanie z vyrovnávacej pamäte

Použite openFromBuffer() keď sú dáta súboru už v pamäti, napríklad z HTTP požiadavky, BLOBu v databáze alebo po rozbalení zip archívu. Tým sa 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`);

Pre binárne formáty (GLB, STL binary, 3MF) knižnica číta magické bajty z bufferu, aby automaticky detekovala formát, takže môžete predať undefined ako 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čítanie z HTTP (Node.js 18+)

Stiahnite vzdialený asset a načítajte ho bez zásahu do súborové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`);

Kontrola načítanej scény

Po načítaní prejdite graf scény, aby ste vypísali uzly a identifikovali geometriu:

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);

Čítanie metadát assetu

The assetInfo vlastnosť odhaľuje metadáta na úrovni súboru:

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}`);
}

Nie všetky formáty vyplňujú assetInfo. FBX a COLLADA majú bohaté metadáta; OBJ a STL ich zvyčajne nemajú.

Referenčná príručka formátovo-špecifických možností načítania

FormátTrieda možnostíCesta importuKľúčové možnosti
OBJObjLoadOptions@aspose/3d/formats/objenableMaterials, flipCoordinateSystem, scale, normalizeNormal
glTF / GLB(nie je potrebné žiadne)N/AAutomaticky detekované; nie je potrebná trieda možností
STLStlLoadOptions@aspose/3d/formats/stl(v aktuálnej verzii nie sú konfigurovateľné možnosti)
FBXFbxLoadOptions@aspose/3d/formats/fbx(v aktuálnej verzii nie sú konfigurovateľné možnosti)
COLLADAColladaLoadOptions@aspose/3d/formats/collada(v aktuálnej verzii nie sú konfigurovateľné možnosti)
3MF(nie je potrebné žiadne)N/AAutomaticky detekované

Bežné chyby pri načítaní

SymptómPríčinaOprava
Error: Cannot find module '@aspose/3d/formats/obj'moduleResolution nie je nastavené na nodePridať "moduleResolution": "node" do tsconfig.json
Prázdny zoznam uzlov po načítaní OBJ.mtl chýba sidecar alebo enableMaterials nie je nastavenéNastaviť options.enableMaterials = true a zabezpečte .mtl je v rovnakom adresári
Scéna sa načíta, ale rootNode.childNodes je prázdnaFormát používa jedinú koreňovú sieť, nie podriadené uzlyPrístup scene.rootNode.entity priamo
openFromBuffer vyhadzuje pri binárnom STLBuffer bol nesprávne orezaný (chýbajú koncové bajty)Použite celý readFileSync() výstup bez orezávania
Pole animácií je po načítaní FBX prázdneSúbor FBX používa predpočítané transformácie, nie klipyAnimácia je vypálená pre každý snímok; pole klipu bude prázdne

Pozri tiež

 Slovenčina