【问题标题】:gl_PointSize OpenGLES clarificationgl_PointSize OpenGLES 说明
【发布时间】:2018-02-01 14:07:02
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    在顶点着色器中设置 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 个片段的正方形。中心点在这个方格内的碎片受到影响。

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

    【讨论】:

    • Android 下没有名为 GL_PROGRAM_POINT_SIZE 的常量。但是 gl_PointSize 仍然可以在顶点着色器中设置,并且可以正常工作。
    • @neoexpert 是的,你是对的。这是 OpenGL ES 和“桌面”OpenGL 之间的区别
    【解决方案2】:

    gl_PointSize 确定点的大小。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-19
      • 1970-01-01
      • 2011-11-08
      • 2018-01-01
      • 2011-01-04
      • 2015-04-03
      • 2013-10-19
      相关资源
      最近更新 更多