1. Home
  2.   Drako
  3.   .NET용 FileFormat.Drako
FileFormat.Drako for .NET

.NET용 FileFormat.Drako

 
 

Google Draco 파일의 읽기 및 쓰기 프로세스를 .NET API로 단순화

FileFormat.Drako로 압축된 DRC 파일을 손쉽게 편집하여 HEIC 파일 변환 및 자동화를 간소화하는 경량 오픈소스 .NET API

FileFormat.Drako for .NET 은 Draco 파일 처리 경험을 혁신합니다. 이 종합 가이드에서는 경량 오픈 소스 .NET API인 FileFormat.Drako를 활용하여 Draco 파일을 쉽게 처리할 수 있는 기능과 이점을 자세히 알아봅니다.

Draco는 3D 기하학적 메시와 포인트 클라우드 압축 및 압축 해제를 전문으로 하는 Google에서 개발한 오픈 소스 압축 라이브러리입니다. Draco는 3D 그래픽 파일의 크기를 크게 줄임으로써 시각적 품질을 유지하면서 더 빠른 전송을 가능하게 하고 저장 요구 사항을 줄입니다. 웹 기반 및 모바일 플랫폼을 포함한 다양한 3D 애플리케이션을 지원하여 복잡한 3D 데이터를 효율적으로 처리할 수 있습니다. Draco는 게임, 가상 현실, 3D 시각화 등의 산업에서 성능을 최적화하고 사용자 경험을 향상시키는 데 널리 사용됩니다.

FileFormat.Drako는 Draco 파일을 원활하게 읽고 쓰기 위한 강력한 솔루션으로 등장합니다. 이 경량 오픈 소스 .NET API는 Draco 이미지 작업을 단순화하여 개발자와 사용자에게 Draco 파일을 쉽게 처리할 수 있는 사용자 친화적인 인터페이스를 제공합니다.

FileFormat.Drako는 Openize 라이선스에 따라 사용할 수 있습니다.< /p>

주요 기능 및 장점

  • 높은 압축률: Draco는 파일 크기를 크게 줄여 시각적 품질의 눈에 띄는 손실 없이 파일 크기를 최대 90%까지 줄입니다. 따라서 대역폭과 저장 공간이 제한된 애플리케이션에 이상적입니다.
  • 다양한 데이터 유형 지원: Draco는 지오메트리 메쉬 및 포인트 클라우드를 포함하여 광범위한 3D 데이터 유형에 대한 압축을 지원합니다. 정점 위치, 색상, 법선 및 기타 속성을 효율적으로 처리할 수 있습니다.
  • 빠른 압축 및 압축 풀기: 라이브러리는 고속 압축 및 압축 풀기를 제공하도록 설계되어 웹 기반 3D 뷰어 및 가상 현실 경험과 같은 실시간 애플리케이션에 적합합니다.
  • 오픈소스 및 무료: 라이센스 비용이 없고 모든 수준의 개발자와 사용자가 액세스할 수 있는 오픈소스 솔루션의 이점을 누려보세요.
  • C# 애플리케이션과의 원활한 통합: C# 애플리케이션에 손쉽게 IntegrateFileFormat.Drako를 통합하여 기존 워크플로 내에서 원활한 Draco 파일 처리를 가능하게 합니다.

Previous Next

.NET용 FileFormat.Drako를 시작하는 방법

FileFormat.Drako를 시작하는 것은 빠르고 쉽습니다. 다음 단계를 따르세요.

  • InstallFileFormat.Drako: NuGet 패키지 관리자 또는 .NET CLI를 통해 FileFormat.Drako 패키지를 설치합니다.
  • 프로젝트와 통합: C# 프로젝트에서 FileFormat.Drako 라이브러리를 참조하세요.
  • 변환 시작: FileFormat.Drako에서 제공하는 간단한 API를 활용하여 Draco 파일을 읽고 씁니다.

.NET용 FileFormat.Drako를 설치하는 데 권장되는 방법은 NuGet을 사용하는 것입니다. 원활한 설치를 위해 다음 명령어를 사용해주세요.

NuGet을 통한 .NET용 InstallFileFormat.Drako

NuGet> Install-PackageFileFormat.Drako 
GitHub에서 직접 다운로드할 수도 있습니다.

C#의 DracoMesh로 Draco 파일 읽기

이 코드 조각은 Draco 파일을 효율적으로 로드하고 후속 작업을 위해 DracoMesh 인스턴스에 저장합니다.

  • File.ReadAllBytes를 사용하여 "cube.drc"라는 DRC 파일을 엽니다.
  • 바이트에서 DracoMesh개체로 3D 메시를 로드합니다.

아래 코드 조각을 복사하여 기본 파일에 붙여넣고 프로그램을 실행하세요.

DracoMesh 인스턴스로 .drc 파일 읽기

 
    byte[] cube = File.ReadAllBytes("cube.drc");
    DracoMesh dm = (DracoMesh)Draco.Decode(cube);

Draco 파일 읽기 및 C#의 Wavefront OBJ에 쓰기

다음 코드는 기존 3D Draco 파일을 열고 추가 처리를 위해 obj 형식으로 쓰는 방법을 보여줍니다.

  • File.ReadAllBytes를 사용하여 "input.drc"라는 Draco 파일을 엽니다.
  • Draco 메시를 바이트에서 DracoMesh개체로 로드합니다.
  • DracoMesh.GetNamedAttribute를 사용하여 위치 속성을 찾고 해당 콘텐츠를 Span로 바꿉니다.
  • OBJ 형식을 사용하여 출력에 제어점을 씁니다.
  • DracoMesh.ReadFace를 사용하여 각 면 모서리를 읽습니다.
  • PointAttribute.MappedIndex를 사용하여 면 모서리를 제어점의 인덱스에 매핑합니다.
  • OBJ 형식을 사용하여 출력에 얼굴을 씁니다.

아래 코드 조각을 복사하여 기본 파일에 붙여넣고 프로그램을 실행하세요.

.drc 파일을 DracoMesh로 읽고 웨이브프런트 obj로 내보내기

 
    //load draco file
    var bytes = File.ReadAllBytes("input.drc");
    var mesh = Draco.Decode(bytes) as DracoMesh;
    if (mesh == null)
        throw new InvalidDataException("Input file is not a valid draco file.");
    var attrPos = mesh.GetNamedAttribute(AttributeType.Position);
    var points = MemoryMarshal.Cast(attrPos.Buffer.AsSpan());
    var sb = new StringBuilder();
    for (int i = 0; i < points.Length; i += 3)
    {
        sb.AppendLine($"v {points[i]} {points[i + 1]} {points[i + 2]}");
    }
    Span face = stackalloc int[3];
    for (int i = 0; i < mesh.NumFaces; i++)
    {
        mesh.ReadFace(i, face);
        var a = attrPos.MappedIndex(face[0]) + 1;
        var b = attrPos.MappedIndex(face[1]) + 1;
        var c = attrPos.MappedIndex(face[2]) + 1;
        sb.AppendLine($"f {a} {b} {c}");
    }
    File.WriteAllText("output.obj", sb.ToString());

C#에서 프로그래밍 방식으로 제어점, 삼각형을 Draco 파일로 인코딩

제공된 코드는 프로그래밍 방식으로 제어점과 삼각형에서 Draco 파일을 생성하고 C#을 사용하여 "output.drc"로 저장하는 방법을 보여줍니다. 각 단계는 다음과 같습니다.

  • DracoMesh인스턴스를 생성합니다.
  • 제어점을 PointAttribute로 래핑합니다.
  • DracoMeshPointAttribute를 추가합니다.
  • 삼각형 인덱스를 추가합니다.
  • 지정된 인코딩 매개변수를 사용하여 DracoEncodeOptions개체를 생성합니다.
  • Draco.Encode를 사용하여 메시를 바이트로 인코딩합니다.

아래 코드 조각을 복사하여 기본 파일에 붙여넣고 프로그램을 실행하세요.

벡터와 얼굴을 .drc 파일로 인코딩

 
  Vector3[] controlPoints = new Vector3[]
  {
          new Vector3( -5, 0, 5.0f),
          new Vector3( 5, 0, 5.0f),
          new Vector3( 5, 10, 5.0f),
          new Vector3( -5, 10, 5.0f),
          new Vector3( -5, 0, -5.0f),
          new Vector3( 5, 0, -5.0f),
          new Vector3( 5, 10, -5.0f),
          new Vector3( -5, 10, -5.0f)
  };

  int[] indices = new int[]
  {
          0,1,2, 0, 2, 3, // Front face (Z+)
          1,5,6, 1, 6, 2, // Right side (X+)
          5,4,7, 5, 7, 6, // Back face (Z-)
          4,0,3, 4, 3, 7, // Left side (X-)
          0,4,5, 0, 5, 1, // Bottom face (Y-)
          3,2,6, 3, 6, 7 // Top face (Y+)
  };

  var mesh = new DracoMesh();
  //construct an attribute for position, with type float[3], 
  var attrPos = PointAttribute.Wrap(AttributeType.Position, controlPoints);
  mesh.AddAttribute(attrPos);
  //add triangle indices
  mesh.Indices.AddRange(indices);
  //number of the control points, it's required for the encoder to produce correct result.
  mesh.NumPoints = 8;
  //You can also use following methods to deduplicate the attributes to reduce the file size
  //mesh.DeduplicateAttributeValues();
  //mesh.DeduplicatePointIds();

  var opt = new DracoEncodeOptions();
  var drcBytes = Draco.Encode(mesh, opt);
  File.WriteAllBytes("output.drc", drcBytes);

FileFormat.Drako는 직관적인 API, 포괄적인 형식 지원, C# 애플리케이션과의 원활한 통합을 제공하여 개발자와 사용자 모두가 Draco 파일을 손쉽게 관리할 수 있도록 지원합니다. draco 파일을 다른 파일로 변환하든, 렌더링을 위해 draco를 로드하든 FileFormat.Drako는 프로세스를 단순화하여 모든 단계에서 최적의 효율성과 품질을 보장합니다.

저희 GitHub 저장소를 탐색하여 이 오픈 소스 API에 기여하고, 개선 사항을 제안하고, 강화하세요. FileFormat.Drako -.NET용

 한국인