13

シェーダーを使用していくつかの値を計算し、それらを返してさらに使用することはできますか?

たとえば、メッシュを GPU に送信し、変更方法 (頂点の位置の変更) に関するいくつかのパラメーターを使用して、結果のメッシュを取り戻しますか? シェーダーから CPU への通信用の変数を見たことがないので、それはむしろ不可能だと思います。私はGLSLを使用しているので、均一、属性、およびさまざまです。属性またはユニフォームを使用する必要がありますか?それらはレンダリング後も有効ですか? これらの変数の値を変更して、CPU で読み返すことはできますか? GPU でデータをマッピングする方法はありますが、それらは変更されて有効になりますか?

これは私がこれについて考えている方法ですが、私には知られていない他の方法があるかもしれません. GLSL に関する本を読んだばかりで、より複雑なシェーダーをプログラムしたいので、誰かがこれを説明してくれたらうれしいです。

ありがとう

4

4 に答える 4

7

素晴らしい質問です。グラフィックス プロセッシング ユニット ( GPGPU )での汎用コンピューティングの素晴らしい新しい世界へようこそ。

あなたがやりたいことは、ピクセルシェーダーで可能です。テクスチャ (つまりデータ) をロードし、シェーダーを適用して (目的の計算を行うため)、Render to Texture を使用して結果のデータを GPU からメイン メモリ (RAM) に渡します。

この目的のために作成されたツールがあり、最も注目すべきはOpenCLCUDAです。これらは GPGPU を大いに支援するため、この種のプログラミングはほとんど CPU プログラミングのように見えます。

3D グラフィックスの経験は必要ありません (ただし、それでも望ましい :) )。テクスチャでトリックを行う必要はありません。配列を GPU メモリにロードするだけです。処理アルゴリズムは、わずかに変更されたバージョンの C で記述されています。最新バージョンの CUDA は C++ をサポートしています。

最も成熟した CUDA から始めることをお勧めします: http://www.nvidia.com/object/cuda_home_new.html

于 2010-10-12T13:18:59.877 に答える
2

これは、Open CL、Microsoft Direct Compute (DirectX 11 の一部)、または CUDA を使用する最新のグラフィックス カードで簡単に実現できます。通常のシェーダー言語が使用されます (GLSL、HLSL など)。最初の 2 つは Nvidia と ATI の両方のグラフィック カードで動作します。cuda は nvidia 専用です。

これらは、グラフィックス カード上のものを計算するための特別なライブラリです。これには通常の 3D API は使用しませんが、いくつかの回避策で可能です。

于 2010-10-12T13:12:16.913 に答える
1

OpenGL でシェーダー バッファー オブジェクトを使用して、ホストで読み取ることができるシェーダーに値を書き込むことができるようになりました。

于 2014-09-24T22:17:07.253 に答える
0

私の最善の推測は、動作モデルに GPU を利用するために作成されたライブラリであるBehaveRTにあなたを送ることです。ライブラリで変更を定式化できれば、その抽象化の恩恵を受けることができると思います

CPU と GPU の間でやり取りされるデータについては、ドキュメントを参照させていただきますが、よくわかりません

于 2010-10-12T13:11:58.753 に答える