Laster inn 3D-modeller

@aspose/3d gir to innlastingsmetoder på Scene klassen: open() for innlasting via filsti og openFromBuffer() for data i minnet. Formatgjenkjenning er automatisk fra binære magiske tall eller filendelse, så du sjelden trenger å spesifisere kildeformatet eksplisitt.

Laste fra en filsti

Send filstistrengen til scene.open(). Biblioteket oppdager formatet fra filendelsen og, for binære formater, fra de magiske bytes:

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() erstatter alt eksisterende sceninnhold. Hvis du trenger å laste flere filer, opprett separate Scene instanser.

Laste OBJ med materialer

OBJ-filer refererer materialer gjennom en sidecar .mtl fil. Materialinnlasting er aktivert som standard (ObjLoadOptions.enableMaterials = true). Send ObjLoadOptions for å kontrollere dette og andre innlastingsalternativer:

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

Laste fra en buffer

Bruk openFromBuffer() når fildataene allerede er i minnet, for eksempel fra en HTTP‑henting, en database‑BLOB eller en zip‑arkivuttrekking. Dette unngår skriving til 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`);

For binære formater (GLB, STL binary, 3MF), biblioteket leser de magiske bytes fra bufferet for å oppdage formatet automatisk, så du kan sende undefined som options-argumentet:

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

Laste fra HTTP (Node.js 18+)

Hent en ekstern ressurs og last den uten å berøre filsystemet:

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

Inspisere den innlastede scenen

Etter innlasting, gå gjennom scenegrafen for å liste opp noder og identifisere geometri:

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

Lese metadata for ressursen

Den assetInfo egenskapen eksponerer metadata på filnivå:

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

Ikke alle formater fyller ut assetInfo. FBX og COLLADA har rik metadata; OBJ og STL har vanligvis ikke det.

Referanse for formatspesifikke innlastingsalternativer

FormatAlternativklasseImportstiNøkkelalternativer
OBJObjLoadOptions@aspose/3d/formats/objenableMaterials, flipCoordinateSystem, scale, normalizeNormal
glTF / GLB(ingen kreves)N/AAutomatisk oppdaget; ingen alternativklasse nødvendig
STLStlLoadOptions@aspose/3d/formats/stl(ingen konfigurerbare alternativer i nåværende versjon)
FBXFbxLoadOptions@aspose/3d/formats/fbx(ingen konfigurerbare alternativer i nåværende versjon)
COLLADAColladaLoadOptions@aspose/3d/formats/collada(ingen konfigurerbare alternativer i nåværende versjon)
3MF(ingen kreves)N/AAutomatisk oppdaget

Vanlige innlastingsfeil

SymptomÅrsakLøsning
Error: Cannot find module '@aspose/3d/formats/obj'moduleResolution ikke satt til nodeLegg til "moduleResolution": "node" til tsconfig.json
Tom node-liste etter lasting av OBJ.mtl sidecar mangler eller enableMaterials ikke sattAngi options.enableMaterials = true og sørg for .mtl er i samme katalog
Scenen lastes men rootNode.childNodes er tomFormatet bruker ett enkelt rotmesh, ikke undernoderTilgang scene.rootNode.entity direkte
openFromBuffer kaster med binær STLBufferen ble skåret feil (etterfølgende byte mangler)Bruk hele readFileSync() utdata uten å kutte
Arrayet med animasjonsklipp er tomt etter FBX-lastningFBX-filen bruker bake‑transformasjoner, ikke klippAnimasjon er bakt per ramme; klippearrayet vil være tomt

Se også

 Norsk