[OpenGL]gl_PointSize和gl_FragCoord

文章目录[x]
  1. 1:gl_PointSize
  2. 2:gl_FragCoord
  3. 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);
}

 

 

点赞

发表评论

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像