首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包含0.375翻译的glDrawPixels()

包含0.375翻译的glDrawPixels()
EN

Stack Overflow用户
提问于 2014-02-02 16:55:23
回答 2查看 545关注 0票数 0

在使用0.375翻译时,我注意到了glDrawPixels()的一些奇怪行为。这是我的GL初始化:

代码语言:javascript
复制
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行。因此,我所做的工作如下:

代码语言:javascript
复制
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,不是吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-02 18:04:43

点(0,480)实际上跨越一个你的剪裁平面给你的投影矩阵。您的亚像素移位黑客推动点超过断点和光栅位置被剪裁。在GL中,只要裁剪了初始位置(在本例中是这样),glRasterPos (...)将使以下所有栅格操作失效。

你可以试试glRasterPos2i (0, 479)。这完全是更有意义的考虑到你的窗口的尺寸无论如何。您还可以删除整个字谜,使用glWindowPos2i (...)代替依赖投影和模型视图矩阵在窗口空间中定位光栅坐标。

票数 2
EN

Stack Overflow用户

发布于 2014-02-02 17:09:16

我不能回答您关于为什么glTranslatef停止glDrawPixels工作的问题,但我可以告诉您,这不是选择绘制位置的方法。请查看glDrawPixels以获得更多信息。它会告诉你关于glRasterPosglWindowPos的事

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21513315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档