【发布时间】:2018-02-01 14:07:02
【问题描述】:
在顶点着色器中设置gl_PointSize = 1.0 意味着或实现什么?这是否意味着顶点本身就是一个像素?
【问题讨论】:
标签: ios opengl-es opengl-es-2.0 vertex-shader pixel-shading
在顶点着色器中设置gl_PointSize = 1.0 意味着或实现什么?这是否意味着顶点本身就是一个像素?
【问题讨论】:
标签: ios opengl-es opengl-es-2.0 vertex-shader pixel-shading
在顶点着色器中设置 gl_PointSize = 1.0 意味着或实现什么?这是否意味着顶点本身就是一个像素?
是的,确实如此。
变量
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 个片段的正方形。中心点在这个方格内的碎片受到影响。
与“桌面”OpenGL 相比,程序中的点大小不必启用。 (在桌面 OpenGL 中,gl_PointSize 仅在启用 GL_PROGRAM_POINT_SIZE 时才有意义。
【讨论】:
gl_PointSize 确定点的大小。
您可以绘制三角形、直线和点。例如,如果您要以点为单位绘制一个三角形,那么屏幕上将出现 3 个点。可以使用 gl_PointSize 参数更改大小。例如,如果您设置 gl_PointSize = 10.0; ,那么屏幕上的点就会很大。
这是干什么用的?提供更多可能性。纹理也可以绑定到一个点——无论你在哪里画一个点,都会有一个纹理。酷,哈?而这种情况下这个纹理的大小是由gl_PointSize决定的;
不太确定可以更改的范围。我想这取决于一点。只需尝试(例如 1.0、4.0、10.0),您就会很快看到差异。
【讨论】: