OpenGL矩形在移动时可任意调整一个像素的大小

OpenGL矩形在移动时可任意调整一个像素的大小,opengl,animation,Opengl,Animation,我在OpenGL中用GL_LINE_LOOP绘制了一个小的2D矩形轮廓,这是许多教程提供的非常标准的东西。矩形未在空间中旋转,其轴与屏幕对齐。我调用了glTranslatef(x,y)来让我的矩形在屏幕上移动。顶点坐标是屏幕宽度和屏幕高度的恒定分数 当矩形移动得非常慢时,我注意到下边界或上边界的移动可能比矩形的边界稍早一点,后者紧随其后。这仅仅是一个像素,在一瞬间,但会使动画看起来很难看 无论antialias处于启用还是禁用状态,尽管如果antialias处于启用状态,线会临时显示为双倍(或加

我在OpenGL中用GL_LINE_LOOP绘制了一个小的2D矩形轮廓,这是许多教程提供的非常标准的东西。矩形未在空间中旋转,其轴与屏幕对齐。我调用了glTranslatef(x,y)来让我的矩形在屏幕上移动。顶点坐标是屏幕宽度和屏幕高度的恒定分数

当矩形移动得非常慢时,我注意到下边界或上边界的移动可能比矩形的边界稍早一点,后者紧随其后。这仅仅是一个像素,在一瞬间,但会使动画看起来很难看

无论antialias处于启用还是禁用状态,尽管如果antialias处于启用状态,线会临时显示为双倍(或加厚)


我想知道这在OpenGL中是否是标准的,是否有一个命令我丢失了,以避免在设置矩形动画时进行小尺寸调整。

根据描述,这很可能是您的问题:

顶点坐标是屏幕宽度和屏幕高度的恒定分数

理论上,这些坐标正好位于两个像素之间的边界上。由于浮点不准确,结果是顶点可能位于两个相邻像素中的任意一个内

为了简化解释,假设窗口的宽度为20像素,然后使用NDC(标准化设备坐标)指定顶点。所以坐标范围是[-1.0,1.0]。将2.0坐标单位的范围划分为20个像素意味着每个像素的宽度为0.1个单位。每个像素覆盖的坐标范围如下:

[-1.0, -0.9], [-0.9, -0.8], [-0.8, -0.7], ... , [0.8, 0.9], [0.9, 1.0]
因此,如果使用像素计数分数的坐标,如-0.8,则该坐标位于两个像素之间的边界上

如果您希望绘制像素精确的图形,那么使用位于像素中心的坐标将获得更大的成功。在上面的示例中,您将使用以下坐标来处理每个像素:

-0.95, -0.85, -0.75, ... , 0.85, 0.95
通常,如果坐标范围从
xMin
xMax
,并且在该范围内有
n
个像素,则像素
k
的中心坐标为:

xMin + ((k + 0.5) / n) * (xMax - xMin)

非常感谢。我想用类似的方法解决这个问题,但我希望OpenGL能够内置一些东西来防止这种情况发生。