在使用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);现在,我想画一个640x30像素缓冲区到我的GL窗口的最后30行。因此,我所做的工作如下:
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,不是吗?
发布于 2014-02-02 18:04:43
点(0,480)实际上跨越一个你的剪裁平面给你的投影矩阵。您的亚像素移位黑客推动点超过断点和光栅位置被剪裁。在GL中,只要裁剪了初始位置(在本例中是这样),glRasterPos (...)将使以下所有栅格操作失效。
你可以试试glRasterPos2i (0, 479)。这完全是更有意义的考虑到你的窗口的尺寸无论如何。您还可以删除整个字谜,使用glWindowPos2i (...)代替依赖投影和模型视图矩阵在窗口空间中定位光栅坐标。
发布于 2014-02-02 17:09:16
我不能回答您关于为什么glTranslatef停止glDrawPixels工作的问题,但我可以告诉您,这不是选择绘制位置的方法。请查看glDrawPixels以获得更多信息。它会告诉你关于glRasterPos和glWindowPos的事
https://stackoverflow.com/questions/21513315
复制相似问题