【发布时间】:2014-02-26 02:38:34
【问题描述】:
我注意到在使用 0.375 转换时 glDrawPixels() 有一些奇怪的行为。这是我的 GL 初始化:
width = 640; height = 480;
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity( );
glOrtho(0, width, height, 0, 0, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity( );
glTranslatef(0.375, 0.375, 0.0);
现在我想在我的 GL 窗口的最后 30 行绘制一个 640x30 像素的缓冲区。因此,我执行以下操作:
glRasterPos2i(0, 480);
glDrawPixels(640, 30, GL_RGBA, GL_UNSIGNED_BYTE, pixelbuffer);
不幸的是,使用此代码无法绘制任何内容。 glGetError() 也返回 0。有趣的是,一旦我删除对 glTranslatef(0.375, 0.375, 0.0) 的调用,一切正常!
那么有人可以向我解释一下为什么这两个轴上的 0.375 平移会混淆 glDrawPixels() 吗?这是否在内部以某种方式四舍五入到 1.0,使我对 glDrawPixels() 的调用突然想要绘制超出上下文的边界,因此它被 OpenGL 剪裁了?这是我能想到的唯一解释,但我不明白为什么 OpenGL 应该将 0.375 转换四舍五入为 1.0……它应该向下舍入为 0.0,不是吗?
【问题讨论】:
-
您为什么认为正在进行舍入?管道是完全浮点的,这里唯一重要的时间是当您将窗口空间位置捕捉到像素位置以进行光栅化时。您的问题发生在之前甚至发生,它与剪辑有关。最终,
glWindowPos2i (...)将是一个更好的解决方案,如我的回答中所述。 -
很遗憾,我不能使用 glWindowPos2i(),因为那是 OpenGL 1.4,我需要支持更早的版本。