将一中的b站视频听完,超级基础入门的东西。继续上次的。
设置顶点着色器
//顶点着色器源码存入字符串 动态编译不报错
const char* vertexShaderSource = "#version 410 core\n"
"layout(location=0) in vec3 aPos;\n"
"out vec4 vertexColor;\n"
"void main()\n"
"{\n"
"vertexColor = vec4(1.0f,0.0f,0.0f, 1.0f);\n"
"gl_Position = vec4(aPos.x,aPos.y,aPos.z, 1.0f);\n"
"}\n\0";
顶点着色器程序建立
int vertexShader = glCreateShader(GL_VERTEX_SHADER);//创建顶点着色器对象
glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);//将源码赋给着色器对象
glCompileShader(vertexShader);//编译着色器
glAttachShader(shaderProgram, vertexShader);//将编译好的顶点着色器附加到程序上
glLinkProgram(shaderProgram);//链接生成程序
EBO
从顶点数据中检索,选取输出双三角形线框
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);//画图模式设置边框or填充 GL_LINE
glGenBuffers(1, &EBO);//生成
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);//绑定,缓冲类型
//往显卡写值,分配显存空间
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
glDrawElements(GL_TRIANGLES, 6,GL_UNSIGNED_INT,0);//EBO绘图
Uniform
int shaderProgram;
int vertexColorLocation;
float timeValue = glfwGetTime();
float greenValue = (sin(timeValue));
glUniform4f(vertexColorLocation, 0.2f, greenValue, 0.0f, 1.0f);
const char* fragmentShaderSource = "#version 410 core\n"
"in vec4 vertexColor;\n"
"out vec4 FragColor;\n"
"uniform vec4 ourColor;\n"
"void main()\n"
"{\n"
"FragColor = ourColor;\n"
"}\n\0";
vertexColorLocation=glGetUniformLocation(shaderProgram, "ourColor");
color3f/shader/texture和光照还是不太懂,慢慢学吧