0

OpenGLとCUDAを使用してポイントクラウドを実装しようとしています。ポイントの半径は、関連するデータに基づいて、時間の経過とともにサイズが変化します。

私はOpenGLとCUDAにまったく慣れていないので、この目標を達成するのにかなり苦労しています。OpenGL、GLSL、およびCUDAの基本を学んだ後、プログラムのどの部分をどのように達成する必要があるかについて完全に混乱しています。

私の考えは次のとおりでした:

  • 頂点位置でVBOを使用する
  • 頂点半径のあるVBOを使用する
  • 頂点が不確実なVBOを使用します。このデータに基づいて、頂点の半径はアニメーションで変化します。
  • フレームごとにCUDAカーネルのすべての頂点の半径を計算します
  • glDrawArraysを呼び出してすべてのポイントをレンダリングし、頂点シェーダーを使用します。これにより、配列からすべてのデータが入力として取得されます。

まず第一に...この目的のためにCUDAシェーダーとGLSLシェーダーを一緒に使用することは合理的ですか?どちらか一方を使用することについていくつか読んだので、それについてはよくわかりません。

2番目の質問は、プログラムのどの部分がCPUで実行され、どの部分がGPUで実行されるかということです。カーネルでデータを計算し、それをOpenGL表示関数に戻してレンダリングするのは理にかなっていますか?

4

1 に答える 1

1

まず第一に...この目的のためにCUDAシェーダーとGLSLシェーダーを一緒に使用することは合理的ですか?どちらか一方を使用することについていくつか読んだので、それについてはよくわかりません。

いいえ、それは合理的ではありません。画像を取得することが目標の場合は、OpenGLを使用してください。重い計算(大きな行列の乗算など)を行うことが目標の場合は、CUDAを使用します。

CUDAをまったく使用せずに、頂点シェーダーですべての頂点の半径を計算できます。一様変数を使用して、時間情報をシェーダーに渡します。カーネルの起動や追加のデータ転送が必要ないため、純粋なOpenGLアプローチははるかに高速になります。

2番目の質問は、プログラムのどの部分がCPUで実行され、どの部分がGPUで実行されるかということです。カーネルでデータを計算し、それをOpenGL表示関数に戻してレンダリングするのは理にかなっていますか?

GLSLシェーダーとCUDAカーネルはGPUで実行されます。その他のコード-CPU上。レンダリングパイプラインですべてを計算できる場合(そしてできる場合)、CUDAの起動には意味がありません。

于 2013-01-04T13:55:29.797 に答える