Redare scenă și export
@aspose/3d este o bibliotecă de procesare și conversie și nu efectuează randare GPU sau produce fișiere imagine. „Randarea” în contextul acestei biblioteci înseamnă exportarea unei scene într-un format pe care un renderer ulterior, motor de jocuri sau vizualizator îl poate consuma.
Această pagină acoperă toate căile de export: salvarea pe fișier, ieșirea în buffer în memorie, opțiuni specifice formatului și cum să pregătiți scenele pentru țintele comune ulterioare (Three.js, Babylon.js, vizualizatoare de modele și motoare de jocuri).
Export de bază
Apel scene.save() cu o cale de fișier. Biblioteca deduce formatul de ieșire din extensia fișierului:
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('input.obj'); // use a supported format (OBJ, glTF, GLB, STL, 3MF, COLLADA)
scene.save('output.glb'); // GLB (binary glTF)
scene.save('output.stl'); // STL
scene.save('output.dae'); // COLLADA
scene.save('output.3mf'); // 3MF
Exportarea în GLB (Recomandat pentru Web și Jocuri)
GLB (glTF 2.0 binar) este un singur fișier autonom care încorporează toate datele de mesh, materialele și texturile. Este formatul de ieșire recomandat pentru vizualizatoare web (Three.js, Babylon.js, model-viewer) și motoare de jocuri (Godot, Unity prin importator):
import { Scene } from '@aspose/3d';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
const scene = new Scene();
scene.open('source.obj');
const opts = new GltfSaveOptions();
opts.binaryMode = true; // produce .glb instead of .gltf + .bin
scene.save('output.glb', opts);
console.log('GLB export complete');Set binaryMode = true pentru a produce un fișier GLB autonom. Când false, ieșirea este un .gltf fișier JSON cu un .bin buffer sidecar.
Exportarea în glTF (Format JSON pentru Inspecție)
Varianta JSON (.gltf + .bin) este utilă în timpul dezvoltării deoarece JSON-ul este ușor de citit de către oameni:
import { Scene } from '@aspose/3d';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
const scene = new Scene();
scene.open('input.dae'); // COLLADA is fully supported; FBX is not wired into scene.open()
const opts = new GltfSaveOptions();
opts.binaryMode = false; // JSON + .bin sidecar
scene.save('output.gltf', opts);Exportarea în STL (Fluxuri de lucru pentru imprimare 3D)
STL conține doar geometrie (fără materiale, fără animație). Este formatul standard de schimb pentru slicerele de imprimare 3D:
import { Scene } from '@aspose/3d';
import { StlSaveOptions } from '@aspose/3d/formats/stl';
const scene = new Scene();
scene.open('model.obj');
const opts = new StlSaveOptions();
opts.binaryMode = true; // binary STL is more compact than ASCII
scene.save('output.stl', opts);Set binaryMode = false pentru a produce STL ASCII, care este citibil ca text, dar este mai mare.
Exportarea în FBX (Fluxuri de lucru cu instrumente DCC)
Notă: Clasele de import și export FBX există în bibliotecă, dar detectarea automată a formatului FBX nu este integrată în scene.open() sau scene.save(). Apel scene.save('output.fbx', opts) nu va invoca exportatorul FBX — the .fbx extensia nu este recunoscută de dispatcher‑ul de salvare și apelul va reveni la ieșirea OBJ. Folosiți FbxExporter clasa direct dacă ai nevoie de FBX I/O. Tabelul de suport al formatelor marchează FBX ca No* din acest motiv.
Dacă trebuie să exporți într-un format acceptat de Blender, Maya sau Unreal Engine, folosește GLB sau COLLADA în schimb — ambele sunt complet integrate în. scene.save():
import { Scene } from '@aspose/3d';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
const scene = new Scene();
scene.open('input.dae');
// GLB is fully supported and widely accepted by DCC tools
const opts = new GltfSaveOptions();
opts.binaryMode = true;
scene.save('output.glb', opts);Export în memorie cu saveToBuffer()
Pentru funcții serverless, răspunsuri HTTP și conducte de streaming, exportă direct către un Buffer fără a scrie pe disc:
import { Scene } from '@aspose/3d';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
function convertToGlbBuffer(inputPath: string): Buffer {
const scene = new Scene();
scene.open(inputPath);
const opts = new GltfSaveOptions();
opts.binaryMode = true;
return scene.saveToBuffer('glb', opts);
}
// Express.js / HTTP response example
// const glbBuffer = convertToGlbBuffer('model.obj');
// res.setHeader('Content-Type', 'model/gltf-binary');
// res.send(glbBuffer);
saveToBuffer() primește un șir de format ca prim argument (de ex. 'glb', 'stl', 'obj') și aceleași obiecte de opțiuni ca save().
Combinarea openFromBuffer() și saveToBuffer()
Un pipeline de conversie complet în memorie, fără I/O pe disc în nicio etapă:
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
function objBufferToGlbBuffer(objData: Buffer): Buffer {
const scene = new Scene();
const loadOpts = new ObjLoadOptions();
loadOpts.enableMaterials = true;
scene.openFromBuffer(objData, loadOpts);
const saveOpts = new GltfSaveOptions();
saveOpts.binaryMode = true;
return scene.saveToBuffer('glb', saveOpts);
}Pregătirea scenelor pentru randatoare specifice
Three.js / Babylon.js (Web)
Aceste randatoare încarcă nativ fișiere GLB. Exportă cu binaryMode = true. Dacă texturile sunt referențiate din OBJ-ul sursă, asigură-te că .mtl și fișierele de imagine sunt co-localizate la încărcare.
model-viewer (Componentă Web)
Acceptă .glb direct. Aceleași setări de export ca Three.js.
Godot Engine
Importă GLB prin importatorul Godot (Project → Import). Folosește binaryMode = true. Godot acceptă materialele PBR din glTF 2.0 în mod nativ.
Blender
Pentru cea mai bună fidelitate a importului, folosește glTF (output.gltf + output.bin) sau GLB (output.glb). Importatorul glTF 2.0 al Blenderului gestionează materialele PBR și animația. Notă: exportul FBX prin scene.save() nu este suportat — detectarea automată a formatului FBX nu este integrată în dispatcher-ul de salvare.
3D Printing (Slicers: Cura, PrusaSlicer, Bambu Studio)
Exportă în STL sau 3MF. Folosește 3MF când ai nevoie să păstrezi culoarea sau metadatele materialului. Folosește STL pentru compatibilitate maximă.
Comparație de formate de export
| Format | Extensie | Materiale | Animație | Fișier unic | Cel mai potrivit pentru |
|---|---|---|---|---|---|
| GLB | .glb | PBR (glTF 2.0) | Da | Da | Web, jocuri, livrare generală |
| glTF | .gltf | PBR (glTF 2.0) | Da | Nu (+ .bin) | Dezvoltare, inspecție |
| STL | .stl | Nu | Nu | Da | 3D printing, geometry-only |
| FBX | .fbx | Phong/PBR | Nu* | Nu* | Importator/exportator există, dar nu este integrat în detectarea automată |
| COLLADA | .dae | Da | Da | Da | Schimb Cross-DCC |
| 3MF | .3mf | Culoare/material | Nu | Da | Imprimare 3D modernă |
Probleme comune de exportare
| Simptom | Cauză | Remediere |
|---|---|---|
| Output GLB se deschide ca JSON în vizualizator | binaryMode lăsat ca false | Set opts.binaryMode = true |
| Texturi lipsă în output GLB | binaryMode nu este setat | Setat opts.binaryMode = true pentru GLB auto-conținut |
| Fișierul STL nu are culoare în slicer | Formatul STL nu suportă culoarea | Folosește 3MF pentru date de culoare |
saveToBuffer returnează un buffer gol | Argumentul șirului de format lipsește sau este greșit | Transmite șirul de format, de exemplu. 'glb', 'stl', sau 'obj' |
| FBX se deschide fără animație în Blender | Fișierul sursă (OBJ/STL) nu are animație | Animația este păstrată doar dacă este prezentă în sursă |
| Fișierul de ieșire este foarte mare | OBJ-ul sursă are multe vârfuri duplicate | Ieșirea binară GLB deduplicatează deja; verificați calitatea activului sursă |
Vezi și
- Încărcarea modelului: încărcarea fișierelor 3D de pe disc și din buffer-e
- Graficul scenei: construirea și modificarea scenei înainte de export
- Suport pentru format: matrice completă de citire/scriere
- Prezentare generală a API-ului: toate clasele și enumerările