OpenGL — GLFW — 颜色
参考教程:https://learnopengl-cn.readthedocs.io/zh/latest/02%20Lighting/01%20Colors/
既然,网络上已经有现成的教程了,我为什么还有在写一遍教程呢?
这个教程不是给大家写的,而是给我自己写的,算是我的学习笔记吧。我将编程序的重点提起出来,并将我的经验和遇到的问题记下来,为日后的我做参考用的。知识会随着时间的流过,而慢慢的被遗忘,当日后有一个项目要用到OpenGL的知识时,那个时候的我可能已经将当初学到的OpenGL忘记的擦不多了,这个时候,我就需要过去的我来帮助我,可以这样理解,跨越时空的两个我在完成一个项目!不错,这就是记笔记的作用。
给模型上颜色,两个步骤:
- 编写片段着色器
- 在主程序中给片段着色器赋值
- 在主主函数中,使用片段着色器
你可能会问,颜色有什么好讲的?我想说:你问对了,真的没有什么好讲的。就是定义一个变量:
glm::vec3 color(1.0f, 0.5f, 0.31f); // 珊瑚红(Coral)
编写程序步骤
第1步:
程序
先顶点着色器程序,就用个精简版的程序:(顶点着色器(Vertex Shader)文件名为:color.vs)
#version 330 core
layout (location = 0) in vec3 position;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
void main()
{
gl_Position = projection * view * model * vec4(position, 1.0f);
}
解释
layout (location = 0) in vec3 position;
得到CPP程序中是ID是0的数据,将ID为0的数据的物理意义定义为顶点位置
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
这些变量是需要在CPP程序中等待赋值的。
归根结底,这三个变量都是4*4的矩阵,都是作用于模型的每一个顶点的。
但是他们代表着不同的物理意义:
model | 模型自身的姿态矩阵。姿态:旋转和平移组成。 |
---|---|
view | 摄像机姿态矩阵。 |
projection | 透视矩阵。 |
void main()
{
gl_Position = projection * view * model * vec4(position, 1.0f);
}
gl_Position是GLSL(OpenGL Shading Language)着色语言中的一个内置变量,即输出的顶点位置。
总结:这个顶点着色器的作用就是:更新顶点的位置。
第2步:
程序
编写片段着色器:(片段着色器(F