【步兵 shader】基础篇 By EOS.
上周学习了一下opengl的基础教程,跟做了几节,发现这些基本只是可以支撑写一些简单的shader了。
网站在这里 https://learnopengl-cn.github.io/,很不错的一个系列教程有喜欢的可以亲试一下。
我跟到了这节,发现我基本可以理解shader了,所以拿出来个大家分享一下。
渲染基本流程
引用上文连接中的图,渲染是一个线性流程,他是在不停各个环节处理接收到的数据,然后输出。
首先创建一堆顶点数据,然后顶点着色器对处理这些数据,输出给图元装配器连接成图形,
然后在输出给几何着色器可对图形进行处理,再光栅化成像素模式,输出给片段着色器
计算每一个像素的最终颜色,最后混合叠加输出到到屏幕上。值得一提的地方:在片段着色器运行之前
会执行裁切(Clipping),裁切会丢弃超出你的视图以外的所有像素,用来提升执行效率。
可编程的部分设计到图中蓝框标注的顶点着色器、几何着色器和片段着色器。
当然也可以怎么输入就怎么输出,不进行处理,这样就会看到原本的图形图片。
反之,则是shader编程,要对这些顶点、图形、片段进行处理,显示出想要的酷炫的效果。
opengl至少需要一个 VertexShader和FragmentShader,而GeometryShader则不是必须的。
而一般的shader处理主要集中在FragmentShader,因为我们很少需要让图形形变。
配合代码讲解渲染
//首先我们需要一个渲染程序
int shaderProgram = glCreateProgram();
//一个 vertex shader
int vertexShader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
glCompileShader(vertexShader);
//一个 fragment shader
int fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShader, 1, &