HTML JPG PDF XML GLB
Aspose.3D  for .NET
GLB

Estrai risorse da GLB tramite C#

Crea le tue .NET app per estrarre risorse da GLB file utilizzando le API lato server.

Come estrarre risorse da GLB file utilizzando C#

Per estrarre le risorse dal file GLB, utilizzeremo

Aspose.3D for .NET

API che è una piattaforma API per C# ricca di funzionalità, potente e facile da usare da utilizzare con le risorse di estrazione. Aprire

NuGet

gestore pacchetti, cerca Aspose.3D e installa. È inoltre possibile utilizzare il seguente comando dalla Console di gestione pacchetti.

Comando della console di gestione dei pacchetti


PM> Install-Package Aspose.3D

Passaggi per estrarre risorse da GLB tramite C#

Aspose.3D consente agli sviluppatori di estrarre facilmente le risorse dal file GLB con poche righe di codice.

  • Carica il file GLB tramite il costruttore della classe Scene- Crea un oggetto formato file zip come formato file di output- Crea una classe di archivio e gestisci la classe di asset di estrazione- Chiama il metodo Extract e salva il file

Requisiti di sistema

Aspose.3D for .NET è supportato su tutti i principali sistemi operativi. Assicurati solo di avere i seguenti prerequisiti.

  • Microsoft Windows o un sistema operativo compatibile con .NET Framework, .NET Core, Mono- Ambiente di sviluppo come Microsoft Visual Studio- Aspose.3D for .NET referenziato nel tuo progetto
 

C# codice per estrarre risorse da GLB


//File di origine che devono estrarre le risorse
string file = "template.glb";
Scene scene = new Scene(file);  

//L'output è in un formato di file compresso e Directory rappresenta il nome di una cartella esistente
var zipOutput = Path.Combine("Directory", "OutputFile.zip");
using var output = new FileStream(zipOutput, FileMode.Create);
using var za = new Zip(output);

//Chiama il metodo Extract per eseguire operazioni di estrazione delle risorse
Extract(scene,za,true);

//Metodo Callable Extract,Il parametro texture indica: se estrarre la texture
private void Extract(Scene scene, Zip za,bool texture)
{
    var extractor = new Extractor(za,texture);
    extractor.Extract(scene);
}

//Crea una classe di elaborazione di file compressi
class Zip : IDisposable
{
    private ZipArchive archive;
    private HashSet<string> entries = new HashSet<string>();

    public Zip(Stream stream)
    {
        archive = new ZipArchive(stream, ZipArchiveMode.Create);
    }
    public void Dispose()
    {
        archive.Dispose();
    }

    public void Add(string fileName, byte[] content, bool enableCompression)
    {
        var entryName = PickName(fileName);
        var compressionLevel = enableCompression ? CompressionLevel.Fastest : CompressionLevel.NoCompression;
        var entry = archive.CreateEntry(entryName, compressionLevel);
        using var stream = entry.Open();
        stream.Write(content, 0, content.Length);
    }
    
    private string PickName(string fileName)
    {
        if (!entries.Contains(fileName))
        {
            entries.Add(fileName);
            return fileName;
        }
        var baseName = Path.GetFileNameWithoutExtension(fileName);
        var ext = Path.GetExtension(fileName);
        for (var idx = 2; ; idx++)
        {
            var newName = baseName + "_" + idx;
            if (!string.IsNullOrEmpty(ext))
                newName += ext;
            if (entries.Contains(newName))
                continue;
            entries.Add(newName);
            return newName;
        }
    }
}

//Crea una classe di elaborazione dell'estrazione di risorse
class Extractor
{
    private Zip zip;
    private bool texture;
    HashSet<A3DObject> visited = new HashSet<A3DObject>();
    public Extractor(Zip zip,bool texture)
    {
        this.zip = zip;
        this.texture = texture;
    }

    private bool CanVisit(A3DObject obj)
    {
        if (visited.Contains(obj))
            return false;
        visited.Add(obj);
        return true;
    }
    public void Extract(Scene scene)
    {
        if (scene.Library != null && scene.Library.Count > 0)
        {
            foreach (var obj in scene.Library)
            {
                Visit(obj);
            }
        }
        VisitNode(scene.RootNode);
    }
    private void VisitNode(Node node)
    {
        if (!CanVisit(node))
            return;
        if (texture)
        {
            foreach (var mat in node.Materials)
            {
                VisitMaterial(mat);
            }
        }

        foreach (var entity in node.Entities)
        {
            if (entity is Mesh)
                Save((Mesh)entity, node.Name);
        }
        
        foreach (var child in node.ChildNodes)
        {
            VisitNode(child);
        }
    }
    private void VisitMaterial(Material mat)
    {
        if (!CanVisit(mat))
            return;
        if (!texture)
            return;
        foreach (var tslot in mat)
        {
            if (tslot.Texture is Texture)
            {
                Save((Texture)tslot.Texture);
            }
        }
    }
    private void Visit(A3DObject obj)
    {
        if (texture && obj is Texture)
        {
            Save((Texture)obj);
        }
        else if (obj is Mesh)
        {
            Save((Mesh)obj, null);
        }
        else if (obj is Node)
        {
            VisitNode((Node)obj);
        }
    }
    private void Save(Mesh mesh, string? nodeName)
    {
        if (!CanVisit(mesh))
            return;
        Scene scene = new Scene(mesh);
        using (var ms = new MemoryStream())
        {
            scene.Save(ms, FileFormat.FBX7400ASCII);
            var name = nodeName;
            if (string.IsNullOrEmpty(name))
                name = mesh.Name;
            if (string.IsNullOrEmpty(name))
                name = "mesh";
            var ext = ".fbx";
            zip.Add(name + ext, ms.ToArray(), true);
        }
    }
    private void Save(Texture tex)
    {
        if (tex.Content == null || !CanVisit(tex))
            return;
        var fileName = tex.FileName != null ? Path.GetFileName(tex.FileName) : null;
        zip.Add(fileName, tex.Content, false);
    }
}
 
  • Circa Aspose.3D for .NET API

    Aspose.3D è un CAD e un Gameware API per caricare, modificare e convertire 3D file. API è autonomo e non richiede alcun 3D software di modellazione o rendering. Si può facilmente usare API per Discreet3DS, WavefrontOBJ, STL (ASCII, Binary), Universal3D, FBX (ASCII, Binary), Collada, glTF, PLY, GLB, DirectX e altri formati.

    App gratuita per estrarre risorse da GLB

    Controlla le nostre demo dal vivo su Estrattore GLB con i seguenti vantaggi.

      Non è necessario scaricare o configurare nulla
      Non c\'è bisogno di scrivere o compilare codice
      Carica il file GLB e premi il pulsante "Estrai".
      Scarica il file GLB dal link, se necessario

    GLB Cos'è il formato file GLB

    GLB è la rappresentazione in formato file binario di 3D modelli salvati nel formato di trasmissione GL (glTF). Informazioni su 3D modelli come gerarchia dei nodi, telecamere, materiali, animazioni e mesh in formato binario. Questo formato binario archivia l'asset glTF (JSON, .bin e immagini) in un BLOB binario. Evita anche il problema dell'aumento della dimensione del file che si verifica in caso di glTF. Il formato di file GLB si traduce in dimensioni di file compatte, caricamento rapido, rappresentazione completa della scena 3D ed estensibilità per un ulteriore sviluppo. Il formato utilizza model/gltf-binary come tipo MIME.

    Leggi di più

    Altre app supportate per estrarre risorse dai formati

    Utilizzando C#, si può anche estrarre risorse da molti altri formati di file, tra cui.

    3MF (3D Formato di produzione)
    AMF (Formato di produzione additiva)
    ASE (File di animazione 2D)
    DAE (Scambio di risorse digitali)
    DXF (Formato di scambio di disegni)
    DRC (Google Draco)
    FBX (3D Formato)
    3DS (3D Formato file mesh di Studio)
    GLTF (Formato di trasmissione GL)
    JT (File di tassellazione di Giove)
    OBJ (3D Formato file)
    PLY (Formato file poligono)
    PDF (3D PDF)
    RVM (Modello AVEVA Plant Design)
    STL (Geometria della superficie 3D intercambiabile)
    U3D (Universal 3D)
    VRML (Linguaggio di modellazione della realtà virtuale)
    X (Immagine del modello DirectX)
    USD (Descrizione della scena universale)
    USDZ (Descrizione scena universale Archivio zip)