文章目录[x]
- 1:gl_PointSize
- 2:gl_FragCoord
- 3:
在前面,我们一直在使用gl_Position,以gl_开头的都是OpenGL中的内建变量,这期来学习更多的内建变量。
gl_PointSize
在前面,不论我们绘制的是三角形,立方体,还是模型,所使用的图元都是 三角形。即 glDrawArrays(GL_TRIANGLES, 0, 36);
的方式来绘制,但是如果使用 glDrawArrays(GL_POINTS, 0, 36);
的话模型的每一个顶点就是一个图元。此时我们通过 gl_PointSize 就可以控制这个Point的大小。拿绘制一个Cube来举例,不过这次我们使用GL_Points图元。
// cpp 开启pointsize
glEnable(GL_PROGRAM_POINT_SIZE);
// vertex shader
void main()
{
gl_Position = projection * view * model * vec4(a_position, 1.0);
gl_PointSize = gl_Position.z; // 把顶点的深度值赋值给gl_PointSize,这样做的结果就是摄像机离顶点越远,这个顶点的size越大
}
gl_FragCoord
gl_FragCoord就是一个vec3。其xy分量代表当前片元所在的屏幕坐标位置,z代表此片元的深度值。
void main()
{
if (gl_FragCoord.x < 640) // 我屏幕是1280x960的,这里设置为宽的一半
fragColor = vec4(1.0, 0.0, 0.0, 1.0);
else
fragColor = vec4(0.0, 1.0, 0.0, 1.0);
}