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

استخراج الأصول من GLB عبر C#

أنشئ تطبيقاتك .NET لاستخراج الأصول من ملفات GLB باستخدام واجهات برمجة التطبيقات من جانب الخادم.

كيفية استخراج الأصول من GLB ملف باستخدام C#

لاستخراج الأصول من ملف GLB ، سنستخدم

Aspose.3D for .NET

API وهو نظام غني بالميزات وقوي وسهل الاستخدام API لـ C# نظام أساسي لاستخدامه مع أصول الاستخراج. افتح

نوجيت

مدير الحزم ، ابحث عن ** Aspose.3D ** وتثبيت. يمكنك أيضًا استخدام الأمر التالي من Package Manager Console.

أمر وحدة تحكم مدير الحزم


PM> Install-Package Aspose.3D

خطوات استخراج الأصول من GLB عبر C#

يُسهل Aspose.3D على المطورين استخراج الأصول من ملف GLB باستخدام بضعة أسطر من التعليمات البرمجية.

  • تحميل ملف GLB عبر منشئ فئة المشهد- إنشاء كائن تنسيق ملف مضغوط كتنسيق ملف الإخراج- إنشاء فئة أرشيف والتعامل مع فئة الأصول استخراج- استدعاء طريقة الاستخراج وحفظ الملف

متطلبات النظام

Aspose.3D for .NET مدعوم في جميع أنظمة التشغيل الرئيسية. فقط تأكد من أن لديك المتطلبات الأساسية التالية.

  • Microsoft Windows أو نظام تشغيل متوافق مع .NET Framework ، .NET Core ، Mono- بيئة التطوير مثل Microsoft Visual Studio- تمت الإشارة إلى Aspose.3D for .NET في مشروعك
 

C# رمز لاستخراج الأصول من GLB


//ملفات المصدر التي تحتاج إلى استخراج الأصول
string file = "template.glb";
Scene scene = new Scene(file);  

//الإخراج بتنسيق ملف مضغوط ، ويمثل الدليل اسم مجلد موجود
var zipOutput = Path.Combine("Directory", "OutputFile.zip");
using var output = new FileStream(zipOutput, FileMode.Create);
using var za = new Zip(output);

//قم باستدعاء طريقة الاستخراج لإجراء عمليات استخراج الأصول
Extract(scene,za,true);

//طريقة الاستخراج القابلة للاستدعاء ، يشير نسيج المعلمة إلى: ما إذا كان سيتم استخراج النسيج
private void Extract(Scene scene, Zip za,bool texture)
{
    var extractor = new Extractor(za,texture);
    extractor.Extract(scene);
}

//قم بإنشاء فئة معالجة ملف مضغوط
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;
        }
    }
}

//إنشاء فئة معالجة استخراج الأصول
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 هو برنامج ألعاب CAD وألعاب API لتحميل وتعديل وتحويل ملفات 3D. API هو برنامج قائم بذاته ولا يتطلب أي 3D برامج عرض أو نماذج. يمكن للمرء بسهولة استخدام API لـ Discreet3DS ، WavefrontOBJ ، STL (ASCII ، ثنائي) ، Universal3D ، FBX (ASCII ، ثنائي) ، Collada ، glTF ، PLY ، GLB و DirectX والمزيد من التنسيقات.

    تطبيق مجاني لاستخراج الأصول من GLB

    تحقق من العروض الحية لدينا ل المستخرج GLB مع الفوائد التالية.

      لا حاجة لتنزيل أو إعداد أي شيء
      لا حاجة لكتابة أو ترجمة التعليمات البرمجية
      ما عليك سوى تحميل ملف GLB والضغط على الزر "استخراج"
      قم بتنزيل ملف GLB من الرابط ، إذا لزم الأمر

    GLB ما هو GLB تنسيق الملف

    GLB هو تمثيل تنسيق الملف الثنائي للنماذج 3D المحفوظة بتنسيق GL Transmission Format (glTF). معلومات حول نماذج 3D مثل التسلسل الهرمي للعقدة والكاميرات والمواد والرسوم المتحركة والشبكات في تنسيق ثنائي. يخزن هذا التنسيق الثنائي glTF الأصل (JSON و. bin والصور) في كائن ثنائي. كما أنه يتجنب مشكلة الزيادة في حجم الملف التي تحدث في حالة glTF. ينتج عن تنسيق الملف GLB أحجام ملفات مضغوطة وتحميل سريع وتمثيل كامل للمشهد 3D وقابلية للتوسيع لمزيد من التطوير. يستخدم التنسيق model / gltf-binary كنوع MIME.

    قراءة المزيد

    التطبيق المدعوم الآخر لاستخراج الأصول من التنسيقات

    باستخدام C# ، يمكن للفرد أيضًا استخراج الأصول من العديد من تنسيقات الملفات الأخرى بما في ذلك.

    3MF (3D تنسيق التصنيع)
    AMF (تنسيق التصنيع الإضافي)
    ASE (ملف الرسوم المتحركة ثنائي الأبعاد)
    DAE (تبادل الأصول الرقمية)
    DXF (تنسيق تبادل الرسم)
    DRC (Google Draco)
    FBX (3D تنسيق)
    3DS (3D تنسيق ملف Studio Mesh)
    GLTF (تنسيق نقل GL)
    JT (ملف فسيفساء كوكب المشتري)
    OBJ (3D تنسيق الملف)
    PLY (تنسيق ملف مضلع)
    PDF (3D PDF)
    RVM (نموذج تصميم مصنع AVEVA)
    STL (قابلة للتبديل 3D هندسة السطح)
    U3D (Universal 3D)
    VRML (لغة نمذجة الواقع الافتراضي)
    X (صورة طراز DirectX)
    USD (وصف المشهد العام)
    USDZ (أرشيف مضغوط لوصف المشهد العالمي)