GLUT单个像素操作会产生意外结果

时间:2016-03-06 01:41:22

标签: c++ opengl glut pixels

为了学习,我使用GLUT访问单个像素数据,并通过遍历窗口中的所有像素手动设置像素颜色,如下所示(省略了一些非相关代码):

(add-to-list 'initial-frame-alist '(fullscreen . maximized))
(add-to-list 'default-frame-alist '(fullscreen . maximized))

我期待得到一个完全红色的像素窗口,但我得到了一些不同的东西 - 一个带有黑色垂直条纹的窗口,好像水平环路突然跳过一些线条。

任何想法我在这里做错了什么?我怀疑它可能与“内部”某处的浮点转换有关,但我不确定要搜索什么。

编辑:我发现如果我在运行时将窗口调整为宽度减小一个像素,那么这些黑色条纹撕裂就会消失。

1 个答案:

答案 0 :(得分:1)

您设置投影,使左边缘位于0,右边位于WIDTH。请注意,您的像素是带有区域的小方块,这意味着0.0映射到左边缘最左边的像素,WIDTH映射到右边缘 - 大多数像素。整数坐标恰好位于两个像素之间的中间位置。并且在变换期间存在一些数值精度损失,最终可能会有两个相邻的点被舍入到相同的像素。

您可以在绘制点时将0.5添加到x和y,或者只是将正投影移动半个像素,以便将整数映射到像素中心:

 Ortho(-0.5f, WIDTH-0.5f, -0.5f, HEIGHT-0.5f, ...);