我正在尝试使用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);
}
答案 0 :(得分:1)
你试图渲染900个顶点,每个像素有一个顶点?你为什么这样做?你使用什么原始类型。只有你使用点才有意义,但是你需要稍微修改一下输出坐标来实际点击片段中心。
通常的方法是仅渲染一个四边形(很容易表示为只有4个顶点的三角形条带),它填充整个帧缓冲区。要实现这一点,你只需要将视口设置为完整的frambeuffer,渲染是从(-1,-1)到(1,1)的四边形。
请注意,在这两种方法中,您都不需要顶点属性。您可以使用gl_VertexID
(直接替换您的方法中的index
,或者作为四边形的4个顶点坐标的const数组的索引)。