gl_PointSize OpenGLES 说明

gl_PointSize OpenGLES clarification

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

gl_PointSize决定一个点的大小。

您可以绘制三角形、直线和点。例如,如果您以点为单位绘制三角形,则屏幕上将出现 3 个点。可以使用 gl_PointSize 参数更改大小。例如,如果您设置 gl_PointSize = 10.0; , 然后屏幕上的点会很大。

这是做什么用的?提供了更多的可能性。纹理也可以绑定到一个点——无论你在哪里画一个点,都会有一个纹理。很酷,哈?本例中该纹理的大小由 gl_PointSize 决定;

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

What does setting gl_PointSize = 1.0 in vertex shader means or achieve? Does that mean the vertex itself is a pixel?

是的,确实如此。


gl_PointSize:

The variable gl_PointSize is intended for a vertex shader to write the size of the point to be rasterized. It is measured in pixels.

参见OpenGL ES Specification - Khronos OpenGL ES Registry, 3.3 Points, page 51:

Point size is taken from the shader builtin gl_PointSize and clamped to the implementation-dependent point size range. If the value written to gl_PointSize is less than or equal to zero, results are undefined. The range is determined by the ALIASED_POINT_SIZE_RANGE and may be queried as described in chapter 6. The maximum point size supported must be at least one.
Point rasterization produces a fragment for each framebuffer pixel whose center lies inside a square centered at the point’s (xw, yw ), with side length equal to the point size.


这意味着,如果您定义 gl_PointSize = 1.0,则这指定了一个边长为 1 个片段的正方形。中心点在该方块内的片段受影响

与 "desktop" OpenGL 相比,在程序中点大小不必启用。 (在桌面 OpenGL 中,gl_PointSize 仅在启用 GL_PROGRAM_POINT_SIZE 时才有意义。