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

Extrahovat aktiva z GLB prostřednictvím C#

Sestavte si své vlastní aplikace .NET pro extrahování prostředků ze souborů GLB pomocí rozhraní API na straně serveru.

Jak extrahovat aktiva ze souboru GLB pomocí C#

K extrahování aktiv ze souboru GLB použijeme

Aspose.3D for .NET

API, což je funkčně bohatá, výkonná a snadno použitelná platforma API pro C#, kterou lze použít s aktivy extraktu. Otevřeno

NuGet

správce balíčků, vyhledejte Aspose.3D a nainstalovat. Můžete také použít následující příkaz z konzoly Správce balíčků.

Příkaz konzoly Správce balíčků


PM> Install-Package Aspose.3D

Kroky k extrakci aktiv z GLB prostřednictvím C#

Aspose.3D usnadňuje vývojářům extrahovat prostředky ze souboru GLB pomocí několika řádků kódu.

  • Načtěte soubor GLB pomocí konstruktoru třídy Scene- Vytvořte objekt formátu souboru zip jako výstupní formát souboru- Vytvořte třídu archivu a zpracujte třídu aktiv extraktu- Zavolejte metodu Extract a uložte soubor

Požadavky na systém

Aspose.3D for .NET je podporováno ve všech hlavních operačních systémech. Jen se ujistěte, že máte následující předpoklady.

  • Microsoft Windows nebo kompatibilní OS s .NET Framework, .NET Core, Mono- Vývojové prostředí jako Microsoft Visual Studio- Aspose.3D for .NET odkazované ve vašem projektu
 

C# kód pro extrahování aktiv z GLB


//Zdrojové soubory, které potřebují extrahovat aktiva
string file = "template.glb";
Scene scene = new Scene(file);  

//Výstup je ve formátu komprimovaného souboru a adresář představuje název existující složky
var zipOutput = Path.Combine("Directory", "OutputFile.zip");
using var output = new FileStream(zipOutput, FileMode.Create);
using var za = new Zip(output);

//Chcete-li provádět operace extrakce aktiv, zavolejte metodu Extract
Extract(scene,za,true);

//Metoda Callable Extract, Parametr textura udává: zda se má extrahovat textura
private void Extract(Scene scene, Zip za,bool texture)
{
    var extractor = new Extractor(za,texture);
    extractor.Extract(scene);
}

//Vytvořte třídu zpracování komprimovaného souboru
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;
        }
    }
}

//Vytvořte třídu zpracování extrakce aktiv
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);
    }
}
 
  • Aspose.3D for .NET API

    Aspose.3D je CAD a herní software API k načítání, úpravě a převodu souborů 3D. API je samostatný a nevyžaduje žádný 3D modelovací nebo vykreslovací software. Lze snadno použít API pro Discreet3DS, WavefrontOBJ, STL (ASCII, binární), Universal3D, FBX (ASCII, binární), Collada, glTF, PLY, GLB, DirectX a další formáty.

    Bezplatná aplikace pro extrahování aktiv z GLB

    Podívejte se na naše živé ukázky Extraktor GLB s následujícími výhodami.

      Není potřeba nic stahovat ani nastavovat
      Není třeba psát nebo kompilovat kód
      Stačí nahrát soubor GLB a stisknout tlačítko "Extrahovat".
      V případě potřeby stáhněte soubor GLB z odkazu

    GLB Co je formát GLB

    GLB je binární reprezentace formátu souboru 3D modelů uložených ve formátu GL Transmission Format (glTF). Informace o modelech 3D, jako je hierarchie uzlů, kamery, materiály, animace a sítě v binárním formátu. Tento binární formát ukládá aktivum glTF (JSON, .bin a obrázky) do binárního objektu blob. Také se vyhnete problému zvětšení velikosti souboru, ke kterému dochází v případě glTF. Formát souboru GLB má za následek kompaktní velikosti souborů, rychlé načítání, kompletní reprezentaci scény 3D a rozšiřitelnost pro další vývoj. Formát používá model/gltf-binary jako typ MIME.

    Více

    Další podporovaná aplikace pro extrahování aktiv z formátů

    Pomocí C# lze také extrahovat prostředky z mnoha dalších formátů souborů včetně.

    3MF (3D Výrobní formát)
    AMF (Formát aditivní výroby)
    ASE (Soubor 2D animace)
    DAE (Výměna digitálních aktiv)
    DXF (Formát výměny výkresů)
    DRC (Google Draco)
    FBX (Formát 3D)
    3DS (3D Formát souboru Mesh aplikace Studio)
    GLTF (Přenosový formát GL)
    JT (Soubor Jupiter Tessellation)
    OBJ (3D Formát souboru)
    PLY (Formát souboru polygonu)
    PDF (3D PDF)
    RVM (Model rostlinného designu AVEVA)
    STL (Vyměnitelná 3D povrchová geometrie)
    U3D (Universal 3D)
    VRML (Jazyk pro modelování virtuální reality)
    X (Obrázek modelu DirectX)
    USD (Univerzální popis scény)
    USDZ (Univerzální popis scény Zip archiv)