1. Home
  2.   Drako
  3.   FileFormat.Drako per .NET
FileFormat.Drako per .NET

FileFormat.Drako per .NET

 
 

Semplifica il processo di lettura e scrittura dei file Google Draco utilizzando l'API .NET

Modifica senza sforzo i file DRC compressi con FileFormat.Drako, un'API .NET leggera e open-source che semplifica la conversione e l'automazione dei file Draco

FileFormat.Drako per .NET rivoluziona la tua esperienza di elaborazione dei file Draco. In questa guida completa, approfondiamo le funzionalità e i vantaggi derivanti dall'utilizzo diFileFormat.Drako, una leggera API .NET open source, per gestire facilmente i file Draco.

Draco è una libreria di compressione open source sviluppata da Google specializzata nella compressione e decompressione di mesh geometriche 3D e nuvole di punti. Riducendo significativamente la dimensione dei file grafici 3D, Draco consente una trasmissione più rapida e riduce i requisiti di archiviazione mantenendo la qualità visiva. Supporta varie applicazioni 3D, comprese piattaforme mobili e basate sul Web, garantendo una gestione efficiente di dati 3D complessi. Draco è ampiamente utilizzato in settori quali i giochi, la realtà virtuale e la visualizzazione 3D per ottimizzare le prestazioni e migliorare l'esperienza dell'utente.

FileFormat.Drako emerge come una potente soluzione per leggere e scrivere senza problemi file Draco. Questa leggera API .NET open source semplifica le operazioni sulle immagini Draco, offrendo agli sviluppatori e agli utenti un'interfaccia intuitiva per gestire i file Draco senza sforzo.

FileFormat.Drako è disponibile sotto Licenza Openize.< /p>

Caratteristiche e vantaggi principali

  • Rapporti di compressione elevati: Draco ottiene una significativa riduzione delle dimensioni dei file, spesso riducendoli fino al 90% senza una notevole perdita di qualità visiva. Ciò lo rende ideale per le applicazioni in cui la larghezza di banda e lo spazio di archiviazione sono limitati.
  • Supporto per vari tipi di dati: Draco supporta la compressione per un'ampia gamma di tipi di dati 3D, incluse mesh geometriche e nuvole di punti. Può gestire le posizioni dei vertici, i colori, le normali e altri attributi in modo efficiente.
  • Compressione e decompressione rapida: la libreria è progettata per offrire compressione e decompressione ad alta velocità, rendendola adatta per applicazioni in tempo reale come visualizzatori 3D basati sul Web ed esperienze di realtà virtuale.
  • Open Source e gratuito: goditi i vantaggi di una soluzione open source senza costi di licenza, rendendola accessibile a sviluppatori e utenti di tutti i livelli.
  • Integrazione perfetta con le applicazioni C#: integra facilmenteFileFormat.Drako nelle tue applicazioni C#, consentendo una gestione perfetta dei file Draco all'interno dei flussi di lavoro esistenti.

Previous Next

Come iniziare con FileFormat.Drako per .NET

Iniziare con FileFormat.Drako è semplice e veloce. Segui semplicemente questi passaggi:

  • InstallFileFormat.Drako: installa il pacchetto FileFormat.Drako tramite NuGet Package Manager o .NET CLI.
  • Integrazione con il tuo progetto: fai riferimento alla libreria FileFormat.Drako nel tuo progetto C#.
  • Avvia la conversione: utilizza la semplice API fornita da FileFormat.Drako per leggere e scrivere file Draco.

Il modo consigliato per installareFileFormat.Drako per .NET è utilizzare NuGet. Utilizza il seguente comando per un'installazione fluida.

InstallFileFormat.Drako per .NET tramite NuGet

NuGet> Install-PackageFileFormat.Drako 
Puoi anche scaricarlo direttamente da GitHub.

Leggi il file Draco in DracoMesh in C#

Questo frammento di codice carica in modo efficiente un file Draco e lo archivia in un'istanza DracoMesh per le operazioni successive.

  • Apri il file DRC denominato "cube.drc" utilizzando File.ReadAllBytes.
  • Carica la mesh 3D dai byte in un oggetto DracoMesh.

Copia e incolla lo snippet di codice sottostante nel file principale ed esegui il programma.

Leggi il file .drc nell'istanza DracoMesh

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

Leggi il file Draco e scrivi su Wavefront OBJ in C#

Il codice seguente illustra come aprire un file Draco 3D esistente e scrivere nel formato obj per un'ulteriore elaborazione:

  • Apri il file Draco denominato "input.drc" utilizzando File.ReadAllBytes.
  • Carica la mesh Draco dai byte in un oggetto DracoMesh.
  • Trova l'attributo position utilizzando DracoMesh.GetNamedAttributee trasforma il suo contenuto in Span<float>.
  • Scrivi punti di controllo sull'output utilizzando il formato OBJ.
  • Leggi gli angoli di ogni faccia utilizzando DracoMesh.ReadFace
  • Mappa gli angoli della faccia sull'indice dei punti di controllo utilizzando PointAttribute.MappedIndex.
  • Scrivi i volti nell'output utilizzando il formato OBJ.

Copia e incolla lo snippet di codice sottostante nel file principale ed esegui il programma.

Leggi il file .drc su DracoMesh ed esportalo su wavefront 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());

Codifica punti di controllo e triangoli nel file Draco in modo programmatico in C#

Il codice fornito dimostra come creare a livello di codice un file Draco da punti di controllo e triangoli e salvarlo come "output.drc" utilizzando C#. Ecco una ripartizione dei passaggi:

  • Crea un'istanza DracoMesh.
  • Avvolgi i punti di controllo in PointAttribute.
  • Aggiungi PointAttributea DracoMesh.
  • Aggiungi gli indici dei triangoli.
  • Crea un oggetto DracoEncodeOptionscon i parametri di codifica specificati.
  • Codifica la mesh in byte utilizzando Draco.Encode.

Copia e incolla lo snippet di codice sottostante nel file principale ed esegui il programma.

Codifica vettori e volti nel file .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 offre un'API intuitiva, supporto completo dei formati e integrazione perfetta con le applicazioni C#, consentendo sia agli sviluppatori che agli utenti di gestire facilmente i file Draco. Che tu stia convertendo file draco in altri file o caricando draco per il rendering, FileFormat.Drako semplifica il processo, garantendo efficienza e qualità ottimali in ogni passaggio.

Esplora il nostro repository GitHub per contribuire, suggerire miglioramenti e potenziare questa API open source: FileFormat.Drako -for-.NET

 Italiano