我正在开发一个在多个平台上运行的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
确切定义了什么?矩形的中心或角落?
答案 0 :(得分:2)
GL_POINTS
不是矩形,首先是。这是一个很容易做出的假设,但如果启用点平滑(不建议使用)或多重采样,实现可能会将它们绘制为圆形。点基元被gl_Position
定义的位置剪切,但光栅化的行为与here所述相同。
我最好的猜测与光栅化过程中的子像素精度有关,GL ES往往具有更少的精度,而且必须被捕捉到整数坐标的东西将表现得不那么有利。您可以尝试子像素移位(例如0.375或0.5)并查看是否有任何改变。在光栅化点基元时,OpenGL和OpenGL ES的兼容实现都遵循相同的规则。
出于好奇,你使用的是什么尺寸?除了 1.0 以外的任何内容都不能保证得到支持。与点大小粒度,有限范围和可变光栅化形状等事物相结合,GL_POINTS
实际上是四边形的不良替代品。