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

C#을(를) 통해 GLB에서 자산 추출

서버 측 API를 사용하여 GLB 파일에서 자산을 추출하는 고유한 .NET 앱을 빌드합니다.

C#을 사용하여 GLB 파일에서 자산을 추출하는 방법

GLB 파일에서 자산을 추출하기 위해 다음을 사용합니다.

Aspose.3D for .NET

API은(는) 추출 자산과 함께 사용할 C# 플랫폼을 위한 풍부하고 강력하며 사용하기 쉬운 API입니다. 열려있는

누겟

패키지 관리자, 검색 Aspose.3D 설치합니다. 패키지 관리자 콘솔에서 다음 명령을 사용할 수도 있습니다.

패키지 관리자 콘솔 명령


PM> Install-Package Aspose.3D

C#을(를) 통해 GLB에서 자산을 추출하는 단계

Aspose.3D를 사용하면 개발자가 몇 줄의 코드로 GLB 파일에서 자산을 쉽게 추출할 수 있습니다.

  • Scene 클래스의 생성자를 통해 GLB 파일 로드- zip 파일 형식 개체를 출력 파일 형식으로 생성- 아카이브 클래스 생성 및 자산 클래스 추출 처리- Extract 메서드를 호출하고 파일을 저장합니다.

시스템 요구 사항

Aspose.3D for .NET은(는) 모든 주요 운영 체제에서 지원됩니다. 다음 전제 조건이 있는지 확인하십시오.

  • Microsoft Windows 또는 .NET Framework, .NET Core, Mono 호환 OS- Microsoft Visual Studio와 같은 개발 환경- 프로젝트에서 참조된 Aspose.3D for .NET
 

GLB에서 자산을 추출하는 C# 코드


//자산을 추출해야 하는 소스 파일
string file = "template.glb";
Scene scene = new Scene(file);  

//출력은 압축 파일 형식이며 Directory는 기존 폴더의 이름을 나타냅니다.
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 메서드, 매개변수 텍스처는 텍스처를 추출할지 여부를 나타냅니다.
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은(는) 3D 파일을 로드, 수정 및 변환하는 CAD 및 Gameware API입니다. API는 독립 실행형이며 3D 모델링 또는 렌더링 소프트웨어가 필요하지 않습니다. Discreet3DS, WavefrontOBJ, STL(ASCII, 바이너리), Universal3D, FBX(ASCII, 바이너리), Collada, glTF, PLY, GLB, DirectX 및 기타 형식.

    GLB에서 자산을 추출하는 무료 앱

    라이브 데모를 확인하려면 추출기 GLB 다음과 같은 혜택이 있습니다.

      아무것도 다운로드하거나 설정할 필요가 없습니다
      코드를 작성하거나 컴파일할 필요가 없습니다.
      GLB 파일을 업로드하고 "추출" 버튼을 누르세요.
      필요한 경우 링크에서 GLB 파일 다운로드

    GLB GLB 파일 형식이란 무엇입니까?

    GLB은 GL 전송 형식(glTF)에 저장된 3D 모델의 바이너리 파일 형식 표현입니다. 노드 계층 구조, 카메라, 재질, 애니메이션 및 메시와 같은 3D 모델에 대한 정보(바이너리 형식). 이 바이너리 형식은 바이너리 blob에 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 Studio 메시 파일 형식)
    GLTF (GL 전송 형식)
    JT (목성 테셀레이션 파일)
    OBJ (3D 파일 형식)
    PLY (다각형 파일 형식)
    PDF (3D PDF)
    RVM (AVEVA 플랜트 설계 모델)
    STL (교체 가능한 3D 표면 기하학)
    U3D (Universal 3D)
    VRML (가상 현실 모델링 언어)
    엑스 (DirectX 모델 이미지)
    USD (보편적인 장면 설명)
    USDZ (유니버설 장면 설명 Zip 아카이브)