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

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

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

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

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

Aspose.3D for .NET

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

NuGet

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

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


PM> Install-Package Aspose.3D

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

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

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

システム要求

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

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

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


//アセットを抽出する必要があるソースファイル
string file = "template.gltf";
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およびその他の形式。

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

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

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

    GLTF GLTF ファイル形式とは

    glTF(GL Transmission Format)は、3Dモデル情報をJSON形式で保存する3Dファイル形式です。 JSONを使用すると、3Dアセットのサイズと、それらのアセットを解凍して使用するために必要なランタイム処理の両方が最小限に抑えられます。アプリケーションによる3Dシーンとモデルの効率的な送信とロードに採用されました。

    続きを読む

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

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

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