为了学习,我使用GLUT访问单个像素数据,并通过遍历窗口中的所有像素手动设置像素颜色,如下所示(省略了一些非相关代码):
(add-to-list 'initial-frame-alist '(fullscreen . maximized))
(add-to-list 'default-frame-alist '(fullscreen . maximized))
我期待得到一个完全红色的像素窗口,但我得到了一些不同的东西 - 一个带有黑色垂直条纹的窗口,好像水平环路突然跳过一些线条。
任何想法我在这里做错了什么?我怀疑它可能与“内部”某处的浮点转换有关,但我不确定要搜索什么。
编辑:我发现如果我在运行时将窗口调整为宽度减小一个像素,那么这些黑色条纹撕裂就会消失。
答案 0 :(得分:1)
您设置投影,使左边缘位于0,右边位于WIDTH
。请注意,您的像素是带有区域的小方块,这意味着0.0映射到左边缘最左边的像素,WIDTH
映射到右边缘 - 大多数像素。整数坐标恰好位于两个像素之间的中间位置。并且在变换期间存在一些数值精度损失,最终可能会有两个相邻的点被舍入到相同的像素。
您可以在绘制点时将0.5
添加到x和y,或者只是将正投影移动半个像素,以便将整数映射到像素中心:
Ortho(-0.5f, WIDTH-0.5f, -0.5f, HEIGHT-0.5f, ...);