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át | Trieda možností | Cesta importu | Kľúčové možnosti |
|---|---|---|---|
| OBJ | ObjLoadOptions | @aspose/3d/formats/obj | enableMaterials, flipCoordinateSystem, scale, normalizeNormal |
| glTF / GLB | (nie je potrebné žiadne) | N/A | Automaticky detekované; nie je potrebná trieda možností |
| STL | StlLoadOptions | @aspose/3d/formats/stl | (v aktuálnej verzii nie sú konfigurovateľné možnosti) |
| FBX | FbxLoadOptions | @aspose/3d/formats/fbx | (v aktuálnej verzii nie sú konfigurovateľné možnosti) |
| COLLADA | ColladaLoadOptions | @aspose/3d/formats/collada | (v aktuálnej verzii nie sú konfigurovateľné možnosti) |
| 3MF | (nie je potrebné žiadne) | N/A | Automaticky detekované |
Bežné chyby pri načítaní
| Symptóm | Príčina | Oprava |
|---|---|---|
Error: Cannot find module '@aspose/3d/formats/obj' | moduleResolution nie je nastavené na node | Pridať "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ázdna | Formát používa jedinú koreňovú sieť, nie podriadené uzly | Prístup scene.rootNode.entity priamo |
openFromBuffer vyhadzuje pri binárnom STL | Buffer 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ázdne | Súbor FBX používa predpočítané transformácie, nie klipy | Animácia je vypálená pre každý snímok; pole klipu bude prázdne |
Pozri tiež
- Ukladanie 3D modelov: možnosti exportu a
saveToBuffer - Graf scény: prechádzanie a úprava hierarchie uzlov
- Prehľad API: všetky triedy a enumerácie
- Podpora formátov: kompletná matica čítania/zápisu