gl_PointSize OpenGLES澄清

时间:2018-02-01 14:07:03

标签: ios opengl-es opengl-es-2.0 vertex-shader pixel-shading

在顶点着色器中设置gl_PointSize = 1.0意味着什么?这是否意味着顶点本身就是一个像素?

2 个答案:

答案 0 :(得分:2)

gl_PointSize确定点的大小。

您可以绘制三角形,线条和点。如果您将绘制例如点的三角形,则屏幕上将显示3个点。可以使用gl_PointSize参数更改大小。如果设置例如gl_PointSize = 10.0; ,然后屏幕上的点将是相当大的。

这是为了什么?提供更多可能性。纹理也可以绑定到一个点 - 无论你在哪里画一个点,都会有一个纹理。很酷,哈?在这种情况下,这个纹理的大小由gl_PointSize决定;

不太确定可以更改的范围。我想这取决于一点。只需尝试(例如1.0,4.0,10.0),您就会很快看到差异。

答案 1 :(得分:2)

  

在顶点着色器中设置gl_PointSize = 1.0意味着什么?这是否意味着顶点本身就是一个像素?

是的,确实如此。


gl_PointSize

  

变量gl_PointSize用于顶点着色器写入要栅格化的点的大小。 以像素为单位进行测量。

请参阅OpenGL ES Specification - Khronos OpenGL ES Registry, 3.3 Points, page 51

  

点大小取自内置gl_PointSize的着色器并固定到   依赖于实现的点大小范围。如果写入gl_PointSize的值小于或等于零,则结果未定义。范围由ALIASED_POINT_SIZE_RANGE确定,可以按照第6章中的描述进行查询。   支持的最大点大小必须至少为1。
  点光栅化为每个帧缓冲像素生成一个片段,其中心位于以点为中心的正方形内( xw yw ),边长等于点大小


这意味着,如果您定义gl_PointSize = 1.0,那么这将指定一个边长为1的片段。中心点位于此正方形的片段受到影响。


当然,如果启用了 gl_PointSize ,则GL_PROGRAM_POINT_SIZE只有意义:

glEnable(GL_PROGRAM_POINT_SIZE);

且原始模式为 GL_POINTS (或多边形模式设为GL_POINT - 例如glPolygonMode(GL_FRONT_AND_BACK, GL_POINT))。