使用GL_POINTS时,gl_Position是否设置了矩形的中心?

时间:2013-12-16 00:54:05

标签: ios windows opengl opengl-es-2.0

我正在开发一个在多个平台上运行的C#/ OpenGL代码库:iOS / OpenGL ES 2.0到MonoTouch,Windows / OpenGL到OpenTK,以及其他平台。

当从四边形切换到GL_POINTS渲染时,我注意到我正在绘制的矩形在iOS上使用偏移进行渲染。

似乎在Windows上, gl_Position定义了要绘制的矩形的中心。这是我期待的行为。

在iOS / OpenGL ES 2.0 / MonoTouch上, gl_Position似乎设置了矩形的左上角

我花了几个小时试图找出原因,因为,当然,我认为这是由我的代码中的错误引起的。

但在我失去更多时间之前:使用GL_POINTS时,gl_Position确切定义了什么?矩形的中心或角落?

1 个答案:

答案 0 :(得分:2)

GL_POINTS不是矩形,首先是。这是一个很容易做出的假设,但如果启用点平滑(不建议使用)或多重采样,实现可能会将它们绘制为圆形。点基元被gl_Position定义的位置剪切,但光栅化的行为与here所述相同。

我最好的猜测与光栅化过程中的子像素精度有关,GL ES往往具有更少的精度,而且必须被捕捉到整数坐标的东西将表现得不那么有利。您可以尝试子像素移位(例如0.375或0.5)并查看是否有任何改变。在光栅化点基元时,OpenGL和OpenGL ES的兼容实现都遵循相同的规则。

出于好奇,你使用的是什么尺寸?除了 1.0 以外的任何内容都不能保证得到支持。与点大小粒度,有限范围和可变光栅化形状等事物相结合,GL_POINTS实际上是四边形的不良替代品。