我正在编写一个简单的程序,使用着色器在OpenGL中渲染对象。
我的片段着色器目前是:
void main()
{
gl_FragColor = vec4(0.5, 0.5, 0.5, 1.0);
}
我的顶点着色器目前是:
layout (location = 0) in vec3 position;
uniform mat4 projection_matrix;
uniform mat4 view_matrix;
void main()
{
gl_Position = projection_matrix * view_matrix * vec4(position, 1.0);
}
我的顶点缓冲区只是一个顶点列表,用于组成我想渲染的三角形。我告诉OpenGL如何解释缓冲区如下:
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
但是,此程序只是将每个顶点呈现为灰色。我想要做的是给每个顶点自己的颜色。所以,我需要改变两件事,我不确定该怎么做:
layout (location = 3) in vec4 colour
吗?答案 0 :(得分:1)
这是一个简单的着色器,可以满足您的需求:
layout(location = 0) in vec3 attrib_Position;
layout(location = 1) in vec4 attrib_Colour
out vec4 attrib_Fragment_Colour;
void main()
{
attrib_Fragment_Colour = attrib_Colour;
gl_Position = vec4(attrib_Position.xy, 0.0, 1.0);
}
请注意,位置更像是“插槽编号”而非实际物理偏移。所以在这种情况下它是1而不是3.我们还定义了一个名为attrib_Fragment_Colour的顶点着色器的输出。这是像素着色器的输入:
in vec4 attrib_Fragment_Colour;
out vec4 Out_Colour;
void main(void)
{
Out_Colour = attrib_Fragment_Colour;
}