Java 用 FileFormat.Drako
Google Dracoファイルの読み取りと書き込みプロセスをJava APIを使用して簡素化
軽量のオープンソースJava APIであるFileFormat.Drakoを使用して、圧縮されたDRCファイルを手軽に編集し、Dracoファイルの変換と自動化を合理化
FileFormat.Drako for Java は、Draco ファイル処理エクスペリエンスに革命をもたらします。この包括的なガイドでは、軽量のオープンソース Java API である FileFormat.Drako を活用して、Draco ファイルを簡単に処理する機能とメリットについて詳しく説明します。
Draco は、Google が開発したオープンソースの圧縮ライブラリで、3D 幾何学メッシュと点群の圧縮と解凍に特化しています。 3D グラフィックス ファイルのサイズを大幅に削減することで、Draco は視覚的な品質を維持しながら、より高速な送信を可能にし、ストレージ要件を削減します。 Web ベースやモバイル プラットフォームを含むさまざまな 3D アプリケーションをサポートし、複雑な 3D データを効率的に処理できます。 Draco は、パフォーマンスを最適化し、ユーザー エクスペリエンスを向上させるために、ゲーム、仮想現実、3D ビジュアライゼーションなどの業界で広く使用されています。
FileFormat.Drako は、Draco ファイルをシームレスに読み書きするための強力なソリューションとして登場しました。この軽量のオープンソース Java API は、Draco 画像の操作を簡素化し、開発者とユーザーに Draco ファイルを簡単に処理するための使いやすいインターフェイスを提供します。
FileFormat.Drako は、MIT License で入手できます。 p>
主な機能と利点- 高い圧縮率: Draco はファイル サイズの大幅な削減を実現し、多くの場合、視覚的な品質を大幅に損なうことなく最大 90% 削減します。このため、帯域幅とストレージが制限されているアプリケーションに最適です。
- さまざまなデータ タイプのサポート: Draco は、ジオメトリ メッシュや点群などの幅広い 3D データ タイプの圧縮をサポートしています。頂点の位置、色、法線、その他の属性を効率的に処理できます。
- 高速圧縮と解凍: このライブラリは高速圧縮と解凍を提供するように設計されており、ウェブベースの 3D ビューアや仮想現実体験などのリアルタイム アプリケーションに適しています。リ>
- オープンソースと無料: ライセンス料がかからず、あらゆるレベルの開発者やユーザーがアクセスできるオープンソース ソリューションのメリットを享受できます。
- Java アプリケーションとのシームレスな統合:FileFormat.Drako を Java アプリケーションに簡単に統合し、既存のワークフロー内でシームレスな Draco ファイル処理を可能にします。
- 高い圧縮率: Draco はファイル サイズの大幅な削減を実現し、多くの場合、視覚的な品質を大幅に損なうことなく最大 90% 削減します。このため、帯域幅とストレージが制限されているアプリケーションに最適です。
- さまざまなデータ タイプのサポート: Draco は、ジオメトリ メッシュや点群などの幅広い 3D データ タイプの圧縮をサポートしています。頂点の位置、色、法線、その他の属性を効率的に処理できます。
- 高速圧縮と解凍: このライブラリは高速圧縮と解凍を提供するように設計されており、ウェブベースの 3D ビューアや仮想現実体験などのリアルタイム アプリケーションに適しています。リ>
- オープンソースと無料: ライセンス料がかからず、あらゆるレベルの開発者やユーザーがアクセスできるオープンソース ソリューションのメリットを享受できます。
- Java アプリケーションとのシームレスな統合:FileFormat.Drako を Java アプリケーションに簡単に統合し、既存のワークフロー内でシームレスな Draco ファイル処理を可能にします。
FileFormat.Drako for Java を始める方法
FileFormat.Drako はすぐに簡単に使い始めることができます。次の手順に従ってください。
- InstallFileFormat.Drako: Maven または Gradle 経由で FileFormat.Drako パッケージをインストールします。
- 変換の開始:FileFormat.Drako が提供するシンプルな API を利用して、Draco ファイルの読み取りと書き込みを行います。
Java 用 FileFormat.Drako をインストールする推奨方法は、Maven を使用することです。スムーズなインストールのために、次の pom 依存関係スニペットを使用してください。
POM スニペット
<dependency>
<groupId>dev.fileformat</groupId>
<artifactId>drako</artifactId>
<version>1.4.1</version>
</dependency>
GitHub から直接ダウンロードすることもできます。Java で Draco ファイルを DracoMesh に読み取る
このコード スニペットは、Draco ファイルを効率的にロードし、後続の操作のために DracoMesh インスタンスに保存します。
Files.readAllBytes
を使用して、「cube.drc」という名前の DRC ファイルを開きます。- バイトから 3D メッシュを
DracoMesh
オブジェクトに読み込みます。
以下のコード スニペットをコピーしてメイン ファイルに貼り付け、プログラムを実行します。
.drc ファイルを DracoMesh インスタンスに読み込みます
byte[] cube = Files.readAllBytes(Paths.get("cube.drc"));
DracoMesh dm = (DracoMesh)Draco.decode(cube);
Java で Draco ファイルを読み取り、Wavefront OBJ に書き込む
次のコードは、既存の 3D Draco ファイルを開いて、さらに処理するために obj 形式に書き込む方法を示しています。
Files.readAllBytes
を使用して、「input.drc」という名前の Draco ファイルを開きます。- Draco メッシュをバイトから
DracoMesh
オブジェクトに読み込みます。 DracoMesh.getNamedAttribute
を使用して位置属性を見つけ、その内容をFloatSpan
に変更します。- OBJ の形式を使用して、コントロール ポイントを出力に書き込みます。
DracoMesh.readFace
を使用して各面の角を読み取ります。PointAttribute.mappedIndex
を使用して、面の角をコントロール ポイントのインデックスにマッピングします。- OBJ の形式を使用して出力に面を書き込みます。
以下のコード スニペットをコピーしてメイン ファイルに貼り付け、プログラムを実行します。
.drc ファイルを DracoMesh に読み込み、wavefront obj にエクスポートします
//load draco file
byte[] bytes = Files.readAllBytes(Paths.get("input.drc"));
DracoMesh mesh = (DracoMesh)Draco.decode(bytes);
if (mesh == null)
throw new IllegalStateException("Input file is not a valid draco file.");
PointAttribute attrPos = mesh.getNamedAttribute(AttributeType.POSITION);
FloatSpan points = attrPos.getBuffer().asSpan().asFloatSpan();
try(FileOutputStream fos = new FileOutputStream("output.obj", false)) {
try (OutputStreamWriter writer = new OutputStreamWriter(fos)) {
for (int i = 0; i < points.size(); i += 3) {
writer.write(String.format("v %f %f %f\n", points.get(i), points.get(i + 1), points.get(i + 2)));
}
int[] face = new int[3];
for (int i = 0; i < mesh.getNumFaces(); i++) {
mesh.readFace(i, face);
int a = attrPos.mappedIndex(face[0]) + 1;
int b = attrPos.mappedIndex(face[1]) + 1;
int c = attrPos.mappedIndex(face[2]) + 1;
writer.write(String.format("f %d %d %d\n", a, b, c));
}
}
}
Java でプログラム的に制御点、三角形を Draco ファイルにエンコード
提供されたコードは、制御点と三角形からプログラムで Draco ファイルを作成し、Java を使用して「output.drc」として保存する方法を示しています。手順の内訳は次のとおりです。
DracoMesh
インスタンスを作成します。- コントロール ポイントを
PointAttribute
にラップします。 PointAttribute
をDracoMesh
に追加します。- 三角形のインデックスを追加します。
- 指定されたエンコード パラメータを使用して
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+)
};
DracoMesh mesh = new DracoMesh();
PointAttribute attrPos = PointAttribute.wrap(AttributeType.POSITION, controlPoints);
mesh.addAttribute(attrPos);
//add triangle indices
mesh.getIndices().addRange(indices);
//number of the control points, it's required for the encoder to produce correct result.
mesh.setNumPoints(8);
//You can also use following methods to deduplicate the attributes to reduce the file size
//mesh.deduplicateAttributeValues();
//mesh.deduplicatePointIds();
DracoEncodeOptions opt = new DracoEncodeOptions();
byte[] drcBytes = Draco.encode(mesh, opt);
Files.write(Paths.get("output.drc"), drcBytes);
FileFormat.Drako は、直感的な API、包括的なフォーマットのサポート、Java アプリケーションとのシームレスな統合を提供し、開発者とユーザーが同様に Draco ファイルを簡単に管理できるようにします。 draco ファイルを他のファイルに変換する場合でも、レンダリングのために draco をロードする場合でも、FileFormat.Drako はプロセスを簡素化し、あらゆるステップで最適な効率と品質を保証します。
GitHub リポジトリを探索して、このオープン ソース API に貢献、改善提案、強化してください: FileFormat.Drako- Java 用