在跟着learnopengl的教程(https://learnopengl.com/Advanced-OpenGL/Geometry-Shader)学习几何着色器(geometry shader)的时候,遇到了一些理解问题,现在解决了,记录一下。
当然中文我也不知道叫啥,但愿差不多吧(希望不要差太多ha)。
在我今天学到进度里,关于着色器的学习有三种,vertex shader, fragment shader, geometry shader,着色器的作用是write data to the GPU card。而这三种着色器的作用又有不同。
1 vertex shader
主要负责to process the primitive vertices里的数据,比如顶点,法线,颜色,深度等信息。因为处理的是原始数据,所以在这里可以做一些变量的声明,比如in, out, sampler2D, uniform,samplerCube, 诸如纹理,也只是坐标和像素组成的,这在纹理坐标texture coordinate中更加直白(纹理的左下角坐标是(0,0),右上角坐标是(1,1), 当使用(0.5,0.5)时,表示一张图片左下1/4的大小)。
2 fragment shader
主要负责to output the color,我理解是每个fragment program每次在screen space里绘图时,只绘制一个像素(所以我一直觉得叫像素处理器之类的,更直白)。 在这里,你可以通过设置模板值等方式,决定是否让fragment shader绘制这个像素。
3 geometry shader
介于前两者中间的,用来处理vertex,colord等信息的中间着色器。开始我一直没理解,后来发现每次在用EndPrimitive()后,传递给 fragment shader的数据是单一的,或者说,处理的时候只处理一个primitive vertex