2017-04-25 17 views
1

私はOpenGLを初めて使い、フラグメントシェーダーを見つけようとしています。私はウィンドウ内に矩形を描きました。ピクセルの高さをハードコーディングすることなく、上半分の色を別の色(たとえば青色)にしたいと思います。 1000年のウィンドウの高さでGLSL for OpenGLのウィンドウサイズ?

は、私のフラグメントシェーダでは、私が持っている:

void main(){ 
if((gl_FragCoord.y) > 500) 
{ 
    color = vec3(.3, .3, 1); 
} 
else 
{ 
    color = fragmentColor; 
} 

どの色の長方形の青の上半分を。しかし、500ピクセルを使うのではなく、私のフラグメントシェーダーの内側からウィンドウの高さを取得したいのですが? uniform vec2 windowSizeを初期化し、glUniform1i()を使用して、この変数にウィンドウの高さを設定しようとしていますが、どうすればよいかわかりません。

+1

'vec2'であるため、' windowSize'を設定するには 'glUniform2f'を使う必要があります。 – rwols

+0

フラグメントシェーダでどのようにコールすることができますか?それはglUniform2f(windowSize、?、?)ですか?他の2つの議論をどのようにすればいいですか? – 3PA

+0

まず、['glGetUniformLocation'](https://www.khronos.org/registry/OpenGL-Refpages/es3.0/html/glGetUniformLocation.xhtml)を介してユニフォーム変数への「ハンドル」を取得し、それを使用します'glUniform2f'の最初の引数として" handle "を使います。 'glUniform2f'の第二引数と第三引数は、あなたが望むものであれば何でも構いません。 – rwols

答えて

0

あなたが記述した状況は、頂点シェーダ内の現在のY座標に設定されているX座標とそれ以外の頂点属性をシェーダに渡す変数であるout floatを求めるだけですOpenGLによって。

フラグメントシェーダ(タイプはin float)に到着すると、補間されます。ほとんどの場合、[–1; 1]境界になります。したがって、上半分の青を塗りつぶすには、その変数が正であるかどうかを確認するだけです。

N.B:あなたが前3.xのにGLSLを使用している場合、out float VARIABLE_NAMEin float VARIABLE_NAMEは両方varying float VARIABLE_NAMEでなければなりません。

関連する問題