2017-04-25 148 views
1

我是新來的OpenGL,並試圖找出我的片段着色器。我在窗口中繪製了一個矩形,並且我想爲其上半部分着色爲不同的顏色(如藍色),而不用硬編碼像素的高度。GLSL中用於OpenGL的窗口大小?

1000的窗口高度,在我的片段着色器,我有:

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

哪個顏色的矩形藍色的上半部分。但是如果我想從片段着色器中獲取窗口高度,而不是僅使用500個像素?我初始化了 uniform vec2 windowSize,並試圖使用glUniform1i()將窗口高度放在這個變量中,但我不知道如何。

+1

您需要使用'glUniform2f'來設置'windowSize',因爲它是'vec2'。 – rwols

+0

我怎樣才能在我的片段着色器中打電話?它是glUniform2f(windowSize,?,?)?我應該如何通過其他兩個論點? – 3PA

+0

您首先通過['glGetUniformLocation'](https://www.khronos.org/registry/OpenGL-Refpages/es3.0/html/glGetUniformLocation.xhtml)獲取統一變量的「句柄」,然後使用該句柄「handle」作爲「glUniform2f」的第一個參數。 「glUniform2f」的第二個和第三個參數可以是任何你想要的。 – rwols

回答

0

你描述的情況只是要求在頂點着色器中設置爲當前Y座標的out float變量,該變量與X座標以及任何其他頂點屬性一起傳遞給着色器通過OpenGL。

當它到達片段着色器(類型爲in float)時,會進行插值,最有可能是在[–1; 1]範圍內。因此,要將上半部分畫成藍色,您只需檢查該變量是否爲正數。

N.B:如果使用到3.x之前GLSL,out float VARIABLE_NAMEin float VARIABLE_NAME都必須是varying float VARIABLE_NAME