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

Wyodrębnij zasoby z GLB przez C#

Twórz własne .NET aplikacje, aby wyodrębniać zasoby z GLB plików, korzystając z interfejsów API po stronie serwera.

Jak wyodrębnić zasoby z pliku GLB za pomocą C#

Aby wyodrębnić zasoby z pliku GLB, użyjemy

Aspose.3D for .NET

API to bogata w funkcje, wydajna i łatwa w użyciu platforma API dla C#, która służy do wyodrębniania zasobów. otwarty

NuGet

menedżer pakietów, szukaj


i zainstaluj. Możesz również użyć następującego polecenia z konsoli Menedżera pakietów.

Polecenie konsoli menedżera pakietów


PM> Install-Package Aspose.3D

Kroki, aby wyodrębnić zasoby z GLB za pośrednictwem C#

Aspose.3D ułatwia programistom wyodrębnianie zasobów z pliku GLB za pomocą zaledwie kilku linijek kodu.

  • Załaduj plik GLB za pomocą konstruktora klasy Scene- Utwórz obiekt formatu pliku zip jako format pliku wyjściowego- Utwórz klasę archiwum i obsługuj wyodrębnioną klasę aktywów- Wywołaj metodę Extract i zapisz plik

wymagania systemowe

Aspose.3D for .NET jest obsługiwany we wszystkich głównych systemach operacyjnych. Tylko upewnij się, że masz następujące wymagania wstępne.

  • Microsoft Windows lub zgodny system operacyjny z .NET Framework, .NET Core, Mono- Środowisko programistyczne, takie jak Microsoft Visual Studio- Aspose.3D for .NET, o którym mowa w Twoim projekcie
 

C# kod do wyodrębniania zasobów z GLB


//Pliki źródłowe, które wymagają wyodrębnienia zasobów
string file = "template.glb";
Scene scene = new Scene(file);  

//Dane wyjściowe są w formacie skompresowanego pliku, a katalog reprezentuje nazwę istniejącego folderu
var zipOutput = Path.Combine("Directory", "OutputFile.zip");
using var output = new FileStream(zipOutput, FileMode.Create);
using var za = new Zip(output);

//Wywołaj metodę Extract, aby wykonać operacje ekstrakcji zasobów
Extract(scene,za,true);

//Metoda Callable Extract, tekstura parametru wskazuje: czy wyodrębnić teksturę
private void Extract(Scene scene, Zip za,bool texture)
{
    var extractor = new Extractor(za,texture);
    extractor.Extract(scene);
}

//Utwórz skompresowaną klasę przetwarzania plików
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;
        }
    }
}

//Utwórz klasę przetwarzania ekstrakcji zasobów
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 to CAD i Gameware API do ładowania, modyfikowania i konwertowania plików 3D. API jest samodzielny i nie wymaga żadnego 3D oprogramowania do modelowania ani renderowania. Można łatwo użyć API dla Discreet3DS, WavefrontOBJ, STL (ASCII, Binary), Universal3D, FBX (ASCII, Binary), Collada, glTF, PLY, GLB, DirectX i inne formaty.

    Bezpłatna aplikacja do wyodrębniania zasobów z GLB

    Sprawdź nasze prezentacje na żywo, aby Ekstraktor GLB z następującymi korzyściami.

      Nie musisz niczego pobierać ani konfigurować
      Nie ma potrzeby pisania ani kompilowania kodu
      Po prostu prześlij plik GLB i naciśnij przycisk „Wyodrębnij”
      W razie potrzeby pobierz plik GLB z linku

    GLB Co to jest GLB Format pliku

    GLB to reprezentacja formatu pliku binarnego modeli 3D zapisanych w formacie transmisji GL (glTF). Informacje o 3D modelach, takich jak hierarchia węzłów, kamery, materiały, animacje i siatki w formacie binarnym. Ten format binarny przechowuje zasób glTF (JSON, .bin i obrazy) w binarnym obiekcie blob. Pozwala to również uniknąć problemu zwiększenia rozmiaru pliku, który ma miejsce w przypadku glTF. Format pliku GLB zapewnia niewielkie rozmiary plików, szybkie ładowanie, kompletną 3D reprezentację sceny i rozszerzalność w celu dalszego rozwoju. Format wykorzystuje model/gltf-binary jako typ MIME.

    Czytaj więcej

    Inna obsługiwana aplikacja do wyodrębniania zasobów z formatów

    Używając C#, można również wyodrębnić zasoby z wielu innych formatów plików, w tym.

    3MF (3D Format produkcyjny)
    AMF (Format wytwarzania przyrostowego)
    ASE (Plik animacji 2D)
    DAE (Wymiana aktywów cyfrowych)
    DXF (Format wymiany rysunków)
    DRC (Google Draco)
    FBX (3D Format)
    3DS (3D Format pliku siatki Studio)
    GLTF (Format transmisji GL)
    JT (Plik teselacji Jowisza)
    OBJ (3D Format pliku)
    PLY (Format pliku wielokąta)
    PDF (3D PDF)
    RVM (Model projektowy zakładu AVEVA)
    STL (Wymienna 3D geometria powierzchni)
    U3D (Universal 3D)
    VRML (Język modelowania rzeczywistości wirtualnej)
    x (Obraz modelu DirectX)
    USD (Uniwersalny opis sceny)
    USDZ (Uniwersalna scena Opis Archiwum Zip)