3D-mallien lataaminen

@aspose/3d tarjoaa kaksi latausmenetelmää Scene luokassa: open() tiedostopolun lataamiseen ja openFromBuffer() muistissa oleville tiedoille. Muodon tunnistus on automaattinen binääristen taikamerkkien tai tiedostopäätteen perusteella, joten sinun harvoin tarvitsee määrittää lähdemuoto erikseen.

Lataaminen tiedostopolusta

Anna tiedostopolun merkkijono scene.open(). Kirjasto havaitsee muodon tiedostopäätteestä ja binäärimuodoissa taikabiteistä:

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() korvaa kaiken olemassa olevan kohtauksen sisällön. Jos sinun täytyy ladata useita tiedostoja, luo erilliset Scene instanssit.

OBJ:n lataaminen materiaalien kanssa

OBJ-tiedostot viittaavat materiaaleihin sivutiedoston kautta .mtl tiedosto. Materiaalien lataus on oletuksena käytössä (ObjLoadOptions.enableMaterials = true). Anna ObjLoadOptions tämän ja muiden latausajankohtaisten asetusten hallitsemiseksi:

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

Lataaminen puskurista

Käytä openFromBuffer() kun tiedoston data on jo muistissa, esimerkiksi HTTP-haun, tietokannan BLOBin tai zip-arkiston purun kautta. Tämä välttää kirjoittamisen levylle:

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

Binäärimuodoille (GLB, STL binary, 3MF) kirjasto lukee taikabiteet puskurista tunnistaakseen muodon automaattisesti, joten voit antaa undefined options-argumenttina:

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

Lataaminen HTTP:stä (Node.js 18+)

Hae etäresurssi ja lataa se koskematta tiedostojärjestelmään:

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

Ladatun kohtauksen tarkastelu

Latauksen jälkeen käy läpi kohtausgrafiikka solmujen luettelointia ja geometrian tunnistamista varten:

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

Resurssin metatietojen lukeminen

Se assetInfo ominaisuus paljastaa tiedostotason metatiedot:

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

Kaikki formaatit eivät täytä assetInfo. FBX- ja COLLADA-tiedostoilla on runsaasti metadataa; OBJ- ja STL-tiedostoilla ei yleensä ole.

Formaattikohtaiset latausasetusten viite

MuotoAsetusluokkaTuontipolkuKeskeiset asetukset
OBJObjLoadOptions@aspose/3d/formats/objenableMaterials, flipCoordinateSystem, scale, normalizeNormal
glTF / GLB(ei vaadita)N/AAutomaattisesti tunnistettu; asetusluokkaa ei tarvita
STLStlLoadOptions@aspose/3d/formats/stl(ei konfiguroitavia asetuksia nykyisessä versiossa)
FBXFbxLoadOptions@aspose/3d/formats/fbx(ei konfiguroitavia asetuksia nykyisessä versiossa)
COLLADAColladaLoadOptions@aspose/3d/formats/collada(ei konfiguroitavia asetuksia nykyisessä versiossa)
3MF(ei vaadita)N/AAutomaattisesti tunnistettu

Yleiset latausvirheet

OireSyyKorjaus
Error: Cannot find module '@aspose/3d/formats/obj'moduleResolution ei asetettu nodeLisää "moduleResolution": "node" kohteeseen tsconfig.json
Tyhjä solmulista OBJ:n lataamisen jälkeen.mtl sidecar puuttuu tai enableMaterials ei asetettuAseta options.enableMaterials = true ja varmista .mtl on samassa hakemistossa
Kohtaus latautuu, mutta rootNode.childNodes on tyhjäMuoto käyttää yhtä juuriverkkoa, ei alisolmujaPääsy scene.rootNode.entity suoraan
openFromBuffer heittelee binäärisen STL:n kanssaPuskuri leikattiin virheellisesti (jäljellä olevat tavut puuttuvat)Käytä täyttä readFileSync() tulostetta ilman leikkausta
Animaatioleikkeiden taulukko on tyhjä FBX-latauksen jälkeenFBX-tiedosto käyttää leivottuja muunnoksia, ei leikkejäAnimaatio on leivottu ruutukohtaisesti; clip-taulukko on tyhjä

Katso myös

 Suomi