2017-04-25 151 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