2013-09-28 62 views
0

我想渲染纹理与OpenGL + GLSL着色器。首先,我试图用白色填充30x30纹理的每个像素。我传递到0到899的顶点着色器索引,表示纹理的每个像素。它是否正确? 顶点着色器:Opengl GLSL渲染纹理

flat in int index; 

void main(void) { 
gl_Position = vec4((index % 30)/15 - 1, floor(index/30)/15 - 1, 0, 1); 
} 

片段着色器:

out vec4 color; 


void main(void) { 
color = vec4(1, 1, 1, 1); 
} 

回答

1

您正在试图使900个顶点,每个像素一个顶点?你为什么这样做?你使用的是什么原始类型。这只有在你使用点时才有意义,但是你需要对输出坐标进行一些细微的修改才能真正击中碎片中心。

通常的做法是渲染一个只填充整个帧缓冲区的四元组(简单表示为只有4个顶点的trinagle条)。为了达到这个目的,你只需要将视口设置为完整的frambeuffer,并且渲染是从(-1,-1)到(1,1)的四倍。

请注意,在这两种方法中,您都不需要顶点属性。您可以只使用gl_VertexID(直接替换为您的方法中的index,或直接替换为四个四个顶点坐标的常量数组的索引)。

+0

我想呈现900顶点,因为我想能够改变纹理的每个像素的颜色,我使用GL_POINTS。 – user1760770

+0

@ user1760770:welll,您也可以使用该四合一应用更改每个单点的颜色。为每个片段调用片段着色器。如果您担心如何通过片段着色器获取数据:纹理是standrad的答案。您甚至可以使用TBO直接访问FS中的某个缓冲区对象。 – derhass

+0

我不太清楚如何在片段着色器中获取片段的位置。 – user1760770