Opengl GLSL渲染到纹理

时间:2013-09-28 22:34:28

标签: opengl glsl

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

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 个答案:

答案 0 :(得分:1)

你试图渲染900个顶点,每个像素有一个顶点?你为什么这样做?你使用什么原始类型。只有你使用点才有意义,但是你需要稍微修改一下输出坐标来实际点击片段中心。

通常的方法是仅渲染一个四边形(很容易表示为只有4个顶点的三角形条带),它填充整个帧缓冲区。要实现这一点,你只需要将视口设置为完整的frambeuffer,渲染是从(-1,-1)到(1,1)的四边形。

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