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
| Muoto | Asetusluokka | Tuontipolku | Keskeiset asetukset |
|---|---|---|---|
| OBJ | ObjLoadOptions | @aspose/3d/formats/obj | enableMaterials, flipCoordinateSystem, scale, normalizeNormal |
| glTF / GLB | (ei vaadita) | N/A | Automaattisesti tunnistettu; asetusluokkaa ei tarvita |
| STL | StlLoadOptions | @aspose/3d/formats/stl | (ei konfiguroitavia asetuksia nykyisessä versiossa) |
| FBX | FbxLoadOptions | @aspose/3d/formats/fbx | (ei konfiguroitavia asetuksia nykyisessä versiossa) |
| COLLADA | ColladaLoadOptions | @aspose/3d/formats/collada | (ei konfiguroitavia asetuksia nykyisessä versiossa) |
| 3MF | (ei vaadita) | N/A | Automaattisesti tunnistettu |
Yleiset latausvirheet
| Oire | Syy | Korjaus |
|---|---|---|
Error: Cannot find module '@aspose/3d/formats/obj' | moduleResolution ei asetettu node | Lisää "moduleResolution": "node" kohteeseen tsconfig.json |
| Tyhjä solmulista OBJ:n lataamisen jälkeen | .mtl sidecar puuttuu tai enableMaterials ei asetettu | Aseta options.enableMaterials = true ja varmista .mtl on samassa hakemistossa |
Kohtaus latautuu, mutta rootNode.childNodes on tyhjä | Muoto käyttää yhtä juuriverkkoa, ei alisolmuja | Pääsy scene.rootNode.entity suoraan |
openFromBuffer heittelee binäärisen STL:n kanssa | Puskuri leikattiin virheellisesti (jäljellä olevat tavut puuttuvat) | Käytä täyttä readFileSync() tulostetta ilman leikkausta |
| Animaatioleikkeiden taulukko on tyhjä FBX-latauksen jälkeen | FBX-tiedosto käyttää leivottuja muunnoksia, ei leikkejä | Animaatio on leivottu ruutukohtaisesti; clip-taulukko on tyhjä |
Katso myös
- 3D-mallien tallentaminen: vientiasetukset ja
saveToBuffer - Kohtausgrafi: soluhierarkian läpikäynti ja muokkaus
- API-yleiskatsaus: kaikki luokat ja luettelotyypit
- Formaattituki: täydellinen luku/kirjoitusmatriisi