2011-08-07 12 views
1

これはおそらくトレードオフを扱うコード形式&です。おそらく明らかです。OpenGLおよび独自のライブラリでベクター(および他の構造体)を渡す

裏話:C++からJavaへ移行する場合

私は今、どのように対処することを確認していない違いが発生しました。

すべてのopengl呼び出しでは、オフセットを持つ配列と、渡された配列がどのように構造化されているかを関数に伝える追加パラメタを渡します。例を挙げるとglDrawArraysとする。

だから、描画するときには、すべての頂点を配列内に持つことが最善の方法です.FlatBufferです。 しかし、私はまた、私の物理学の呼び出しの頂点が必要です。

質問

私は、彼らが可能性があるため、彼らはOpenGLの関数に渡すことはできませんので、Vec3fとPoint3fクラスを扱う、物理学のための別のバッファを作成し、FloatBufferにすべての更新をその結果をコピーする必要があります断片化されてもよい(またはそれらは?)。

また、配列と一緒にオフセットをとる構造体を処理するための別のクラスを用意する必要があります。

public static void addVec3(float[] vec3in_a, int offset_a, float[] vec3in_b, int offset_b, float[] vec3out, int offset_out) 

オフセットとは何でしょうか。 vec3のサイズを考慮し、適切に移動する必要があります(offset_a * = 3)。Vec3の配列が動作するか、通常の浮動小数点配列としてオフセットする必要があります。

ありがとうございました。

答えて

1

GPUで物理計算を行うことはできませんか? JOCLまたはシェーダが可能なルートになります。通常は、CPU上のすべての頂点変換(java、Cなど)を行わないようにして、フレームごとにGPUに送信します。

実際にjava(CPU)で行う必要がある場合は、数学クラス(Vec、Pointなど)を適用してFloatBufferにデータを格納することができます。しかし、FBへの読み書き操作はオーバーヘッドなしではないので、これは基本的な浮動小数点数に比べて確かに遅くなります。

あなたが実際に何をしているのかわからなければ、FB - >数学オブジェクトとバックからのコピーは実現可能です。それが十分に速くない場合...後で最適化してください:)

+0

さらに説明すると、私はアンドロイドのために開発しています。今私はFBがシステムメモリであり、浮動小数点数の配列がJava仮想空間にあることを理解しています。 1つの大きなバッチでコピーすると、パフォーマンスが向上するはずです。しかし、その答えは注目に値するものでした。ありがとう:) – Greg

関連する問題