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

C# aracılığıyla GLB öğesinden Varlıkları Çıkarın

Sunucu tarafı API'lerini kullanarak GLB dosyadan Varlıkları Çıkarmak için kendi .NET uygulamalarınızı oluşturun.

C# Kullanılarak GLB Dosyasından Varlıklar Nasıl Çıkarılır

GLB dosyasından varlık çıkarmak için kullanacağız

Aspose.3D for .NET

C# platformu için zengin özelliklere sahip, güçlü ve kullanımı kolay bir API olan API, özüt varlıklarla birlikte kullanılır. Açık

NuGet

paket yöneticisi, ara Aspose.3D ve yükleyin. Paket Yöneticisi Konsolundan aşağıdaki komutu da kullanabilirsiniz.

Paket Yöneticisi Konsol Komutu


PM> Install-Package Aspose.3D

C# aracılığıyla GLB öğesinden Varlıkları Çıkarma Adımları

Aspose.3D, geliştiricilerin yalnızca birkaç satır kodla GLB dosyasından varlıkları çıkarmasını kolaylaştırır.

  • GLB dosyasını Scene sınıfının yapıcısı aracılığıyla yükleyin- Zip dosyası formatı nesnesini çıktı dosyası formatı olarak oluşturun- Arşiv sınıfı oluşturun ve özüt varlık sınıfını işleyin- Extract yöntemini çağırın ve dosyayı kaydedin

sistem gereksinimleri

Aspose.3D for .NET, tüm büyük işletim sistemlerinde desteklenir. Sadece aşağıdaki ön koşullara sahip olduğunuzdan emin olun.

  • Microsoft Windows veya .NET Framework, .NET Core, Mono ile uyumlu bir işletim sistemi- Microsoft Visual Studio gibi geliştirme ortamı- Projenizde referans verilen Aspose.3D for .NET
 

GLB\'den Varlıkları Ayıklamak için C# kodu


//Varlıkları ayıklaması gereken kaynak dosyalar
string file = "template.glb";
Scene scene = new Scene(file);  

//Çıktı sıkıştırılmış bir dosya biçimindedir ve Dizin mevcut bir klasörün adını temsil eder
var zipOutput = Path.Combine("Directory", "OutputFile.zip");
using var output = new FileStream(zipOutput, FileMode.Create);
using var za = new Zip(output);

//Varlık çıkarma işlemlerini gerçekleştirmek için Extract yöntemini çağırın
Extract(scene,za,true);

//Çağrılabilir Çıkarma yöntemi, Parametre dokusu şunları gösterir: doku çıkarılıp çıkarılmayacağı
private void Extract(Scene scene, Zip za,bool texture)
{
    var extractor = new Extractor(za,texture);
    extractor.Extract(scene);
}

//Sıkıştırılmış bir dosya işleme sınıfı oluşturun
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;
        }
    }
}

//Bir varlık çıkarma işleme sınıfı oluşturun
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 hakkında

    Aspose.3D, 3D dosyalarını yüklemek, değiştirmek ve dönüştürmek için kullanılan bir CAD ve Oyun Yazılımıdır API. API bağımsızdır ve herhangi bir 3D modelleme veya işleme yazılımı gerektirmez. Discreet3DS, WavefrontOBJ, STL (ASCII, Binary), Universal3D, FBX (ASCII, Binary), Collada, glTF, PLY için API kolayca kullanılabilir, GLB, DirectX ve diğer biçimler.

    GLB'den Varlıkları Çıkarmak için Ücretsiz Uygulama

    için canlı demolarımızı kontrol edin Çıkarıcı GLB aşağıdaki faydaları ile.

      Hiçbir şey indirmenize veya kurmanıza gerek yok
      Kod yazmaya veya derlemeye gerek yok
      Sadece GLB dosyasını yükleyin ve "Çıkar" düğmesine basın
      Gerekirse bağlantıdan GLB dosyasını indirin

    GLB GLB Dosya Biçimi nedir

    GLB, GL İletim Formatında (glTF) kaydedilen 3D modellerinin ikili dosya formatı temsilidir. Düğüm hiyerarşisi, kameralar, malzemeler, animasyonlar ve ağlar gibi 3D modelleri hakkında ikili biçimde bilgiler. Bu ikili biçim, glTF varlığını (JSON, .bin ve resimler) ikili bir blob içinde saklar. Ayrıca glTF durumunda meydana gelen dosya boyutunda artış sorununu da önler. GLB dosya biçimi, kompakt dosya boyutları, hızlı yükleme, eksiksiz 3D sahne gösterimi ve daha fazla geliştirme için genişletilebilirlik sağlar. Biçim, MIME türü olarak model/gltf-binary kullanır.

    Daha Fazla Oku

    Varlıkları Biçimlerden Ayıklamak için Desteklenen Diğer Uygulama

    C# kullanarak One, aşağıdakiler de dahil olmak üzere diğer birçok dosya biçiminden varlıkları ayıklayabilir.

    3MF (3D Üretim Biçimi)
    AMF (Eklemeli Üretim Formatı)
    ASE (2D Animasyon Dosyası)
    DAE (Dijital Varlık Değişimi)
    DXF (Çizim Değişim Formatı)
    DRC (Google Draco)
    FBX (3D Biçim)
    3DS (3D Studio Mesh Dosya Biçimi)
    GLTF (GL İletim Formatı)
    JT (Jüpiter Mozaik Dosyası)
    OBJ (3D Dosya Biçimi)
    PLY (Çokgen Dosya Biçimi)
    PDF (3D PDF)
    RVM (AVEVA Fabrika Tasarım Modeli)
    STL (Değiştirilebilir 3D Yüzey Geometrisi)
    U3D (Universal 3D)
    VRML (Sanal Gerçeklik Modelleme Dili)
    x (DirectX Model Resmi)
    USD (Evrensel Sahne Açıklaması)
    USDZ (Evrensel Sahne Tanımı Zip Arşivi)