RealTime-Rendering14-Advanced GLSL
Advanced GLSL
gl_PointSize
GLSL定义了一个叫做gl_PointSize输出变量,它是一个float变量,可以使用它来设置点的大小。在顶点着色器中修改点的大小的话,就可以对每个顶点设置不同的值了。
在顶点着色器中修改点大小的功能默认是禁用的,如果需要使用它的话,需要启用OpenGL的GL_PROGRAM_POINT_SIZE:
1 | glEnable(GL_PROGRAM_POINT_SIZE); |
gl_VertexID
整型变量gl_VertexID储存了正在绘制顶点的当前ID。当使用glDrawElements命令进行渲染的时候,这个变量会存储正在绘制顶点的当前索引。当使用glDrawArrays命令绘制的时候,这个变量会储存从渲染调用开始的已处理顶点数量。
gl_FragCoord
gl_FragCoord的x和y分量是片段的屏幕坐标,其原点为窗口的左下角.z分量等于对应片段的深度值.
1 | void main() |
gl_FrontFacing
gl_FrontFacing变量是一个bool值,如果当前片段是正面的一部分返回true,否则返回false。例如可以创建一个立方体,在内部和外部使用不同的纹理:
1 |
|
gl_FragDepth
输入变量gl_FragCoord能让我们读取当前片段的屏幕空间坐标,并获取它的深度值,但它是一个只读变量,不能修改片段的屏幕空间坐标。GLSL提供了一个叫做gl_FragDepth的输出变量,可以使用它来在着色器内修改片段的深度值。
要想设置深度值,直接写入一个0.0到1.0之间的float值到输出变量gl_FragDepth就可以了:
如果着色器没有写入值到gl_FragDepth,它会自动取用gl_FragCoord.z的值。