1.概念
顶点着色器(可编写):目标是将顶点发给管线
曲面细分着色器(可编写):生成大量三角形,网格形式排列。也提供各种方式操作这些三角形。
几何着色器(可编写):赋予程序员操作一个图元(点,线,三角形)的能力。到达几何着色器阶段时管线已经完成三角形组合的过程,接下来几何着色器会让程序员访问三角形每一个顶点。可以对图元拉伸,增加,缩小以及删除操作,在物体表面增加纹理。
曲面细分着色器与几何着色器的区别:曲面细分着色器只能操作由它自己生成的三角形网格,并不能同时访问所有顶点。
栅格化:栅格化的过程为了显示由三个顶点确定的三角形的像素位置。可以生成平滑的颜色渐变,实现真实的光照。
片段着色器(可编写):赋予程序员操作像素的能力。用于为栅格化的像素指定颜色。
像素操作:用于隐藏面消除。
当绘制场景的各个元素时,片段着色器会生成像素颜色。当多个对象占据颜色缓冲区的相同像素时,保留最近观察者的对象来确定要保留的像素颜色。
z-buffer算法步骤:
- 场景渲染前 深度缓冲区全部初始化最大深度值。
- 当片段着色器输出像素时,计算它到观察者的位置。
- 若当前像素距离小于深度缓冲区的值就用当前像素颜色替换颜色缓冲区的值,同时替换深度缓冲区的值。
GLSL程序载入着色器过程:
- 使用c++获取GlSL着色器代码;
- 创建着色器对象,并将着色器代码加入到着色器对象中;
- 用OpenGL命令编译并连接着色器对象,将他们装载到GPU中。
第一个OPenGL程序:
创建一个GLFW窗口。OPenGL是先将图形渲染到帧缓冲区,再由计算机将帧缓冲区的内容绘制到屏幕的一个窗口上。
流程:
- 初始化GLFW库; glfwInit()
- 实例化GLFWWindow
- 初始化GLEW库; glewInit()
- 调用一次initI()函数
- 循环调用display()函数