GLSLで、計算した値を見る方法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ghffmj
記事: 14
登録日時: 13年前

GLSLで、計算した値を見る方法

#1

投稿記事 by ghffmj » 12年前

連投すみません。

GLSLで計算した結果を見たいのですが、GLSLにはprintfのようなものがありません。
どうすれば値が見れますか?glReadPixelsで、画像形式として渡すことは可能ですが、それだとfloat値が分かりません。
GPUからCPUに変数を伝送させることが出来ればいいのですが。。。(CPUからGPUへはuniform変数で可能なようですが)
例えば、こんなことがやりたいです。

//vertex shader
vec4 a = (1, 2, 3, 1);
x = glModelViewMatrix * a;
このxをCPU側(メインのプログラム)に送る


デバッガーもありますが、数値計算用に使っているだけでGLもループしていないため、恐らく使用できなさそうです。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: GLSLで、計算した値を見る方法

#2

投稿記事 by h2so5 » 12年前

glReadPixelsのtype引数にGL_FLOATを指定できるので、それでfloat値を取得できるはずです。

ghffmj
記事: 14
登録日時: 13年前

Re: GLSLで、計算した値を見る方法

#3

投稿記事 by ghffmj » 12年前

ありがとうございます。
その場合、fragment shaderでgl_FragColorにfloat値を渡せばよいのでしょうか。
また、値の範囲はどうなのでしょうか。例えば、(0, 0)座標に54.321の値をわたし、メインプログラムでそれを読み取ることはできますか?

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: GLSLで、計算した値を見る方法

#4

投稿記事 by h2so5 » 12年前

gl_FragColorには0.0~1.0の間の数値しか渡すことができません。
54.321を渡したい場合は例えば100で割ってgl_FragColorに0.54321を渡した後、メインプログラムで100倍して値を復元します。

ghffmj
記事: 14
登録日時: 13年前

Re: GLSLで、計算した値を見る方法

#5

投稿記事 by ghffmj » 12年前

なるほど、上限値を予め与えておき、それで割ったものをFragmentに渡して、メインの方で同じ上限値をかければよいということですね。確かにそれで出来そうです。

ありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る