0

我正在尝试使用 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);
}
4

1 回答 1

1

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

通常的方法是只渲染填充整个帧缓冲区的四边形(很容易表示为只有 4 个顶点的三角形条带)。为此,您只需将视口设置为完整的帧缓冲,并且渲染是从 (-1,-1) 到 (1,1) 的四边形。

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

于 2013-09-28T22:40:59.943 回答