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

C#を介してGLBからアセットを抽出します

サーバー側APIを使用してGLBファイルからアセットを抽出する独自の.NETアプリを作成します。

C#を使用してGLBファイルからアセットを抽出する方法

GLBファイルからアセットを抽出するために、

Aspose.3D for .NET

APIは、機能が豊富で強力で使いやすいAPIforC#プラットフォームで抽出アセットで使用されます。開ける

NuGet

パッケージマネージャー、検索 ** Aspose.3D ** とインストールします。パッケージマネージャーコンソールから次のコマンドを使用することもできます。

パッケージマネージャーコンソールコマンド


PM> Install-Package Aspose.3D

GLBからC#を介してアセットを抽出する手順

Aspose.3Dを使用すると、開発者は数行のコードでGLBファイルからアセットを簡単に抽出できます。

  • Sceneクラスのコンストラクターを介してGLBファイルをロードします- zipファイル形式オブジェクトを出力ファイル形式として作成します- アーカイブクラスを作成し、アセットクラスの抽出を処理します- Extractメソッドを呼び出して、ファイルを保存します

システム要求

Aspose.3D for .NETは、すべての主要なオペレーティングシステムでサポートされています。次の前提条件があることを確認してください。

  • Microsoft Windowsまたは.NETフレームワーク、.NETコア、Monoと互換性のあるOS- MicrosoftVisualStudioのような開発環境- プロジェクトで参照されているAspose.3Dfor .NET
 

GLBからアセットを抽出するためのC#コード


//アセットを抽出する必要があるソースファイル
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メソッドを呼び出して、アセット抽出操作を実行します
Extract(scene,za,true);

//呼び出し可能なExtractメソッド、パラメータtextureは、テクスチャを抽出するかどうかを示します
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.3Dfor .NETAPI

    Aspose.3Dは、3Dファイルをロード、変更、変換するためのCADおよびゲームウェアAPIです。 APIはスタンドアロンであり、3Dモデリングまたはレンダリングソフトウェアを必要としません。 Discreet3DS、WavefrontOBJ、STL(ASCII、バイナリ)、Universal3D、FBX(ASCII、バイナリ)、Collada、glTF、PLY、 GLB、DirectXおよびその他の形式。

    GLBからアセットを抽出する無料アプリ

    ライブデモをチェックして エクストラクタGLB 以下の利点があります。

      何かをダウンロードしたりセットアップしたりする必要はありません
      コードを書いたりコンパイルしたりする必要はありません
      GLBファイルをアップロードして[抽出]ボタンを押すだけです
      必要に応じて、リンクからGLBファイルをダウンロードします

    GLB GLB ファイル形式とは

    GLBは、GL Transmission Format(glTF)で保存された3Dモデルのバイナリファイル形式表現です。バイナリ形式のノード階層、カメラ、マテリアル、アニメーション、メッシュなどの3Dモデルに関する情報。このバイナリ形式は、glTFアセット(JSON、.bin、および画像)をバイナリブロブに格納します。また、glTFの場合に発生するファイルサイズの増加の問題を回避します。 GLBファイル形式は、コンパクトなファイルサイズ、高速ロード、完全な3Dシーン表現、およびさらなる開発のための拡張性をもたらします。この形式では、MIMEタイプとしてmodel/gltf-binaryを使用します。

    続きを読む

    フォーマットからアセットを抽出するためにサポートされているその他のアプリ

    C#を使用すると、を含む他の多くのファイル形式からアセットを抽出することもできます。

    3MF (3D製造フォーマット)
    AMF (アディティブマニュファクチャリングフォーマット)
    ASE (2Dアニメーションファイル)
    DAE (デジタル資産交換)
    DXF (図面交換フォーマット)
    DRC (Google Draco)
    FBX (3D形式)
    3DS (3Dスタジオメッシュファイル形式)
    GLTF (GL伝送フォーマット)
    JT (木星テッセレーションファイル)
    OBJ (3Dファイル形式)
    PLY (ポリゴンファイル形式)
    PDF (3D PDF)
    RVM (AVEVAプラント設計モデル)
    STL (交換可能な3D表面形状)
    U3D (Universal 3D)
    VRML (仮想現実モデリング言語)
    バツ (DirectXモデルイメージ)
    USD (ユニバーサルシーンの説明)
    USDZ (ユニバーサルシーンの説明Zipアーカイブ)