在片段着色器中声明uniform变量
//顶点着色器
const char *vertexShaderSource = "#version 330 core\n"
"layout (location = 0) in vec3 aPos;\n"
//"out vec4 vertexColor;\n"
"void main()\n"
"{\n"
" gl_Position = vec4(aPos, 1.0); "
//" vertexColor = vec4(0.5, 0.0, 0.0, 1.0); "
"}\0";
//片段着色器
const char *fragmentShaderSource = "#version 330 core\n"
"out vec4 FragColor;\n"
//"in vec4 vertexColor;\n "
"uniform vec4 ourColor;\n"//声明uniform变量
"void main()\n"
"{\n"
" FragColor = ourColor;\n"
"}\n\0";
在循环渲染中,每次渲染更新uniform颜色
// 记得激活着色器
glUseProgram(shaderProgram);
// 更新uniform颜色
float timeValue = glfwGetTime();//获取时间
float greenValue = sin(timeValue) / 2.0f + 0.5f;//设置颜色值范围0--1
int vertexColorLocation = glGetUniformLocation(shaderProgram, "ourColor");//获取uniform的位置索引
glUniform4f(vertexColorLocation, 0.0f, greenValue, 0.0f, 1.0f);//该位置的像素设置颜色
最后可以得到图形的颜色在绿-黑-绿-黑-...中变化。
在输入顶

本文介绍了如何在OpenGL中使用顶点和片段着色器声明及更新uniform变量,实现图形颜色随时间动态变化的效果。通过在片段着色器中设置uniform颜色,并在主程序中根据时间获取sin值来更新颜色,使得图形颜色在绿-黑-绿-黑之间交替变化。同时展示了如何在输入顶点坐标时同时输入颜色,修改顶点和片段着色器以处理新的数据结构,以及设置顶点属性指针来处理颜色信息。最终,通过调整glPolygonMode为GL_LINE,展示了线框渲染的图形效果。
最低0.47元/天 解锁文章
809

被折叠的 条评论
为什么被折叠?



