0

所以我在玩 OpenGL 并绘制位图,有时 glRasterPos 似乎偏离了一个像素。当我得到 GL_CURRENT_RASTERPOSITION 时,我可以看到 roding (floor) 导致了这个错误。例如,当我将 x-pos 设置为 110 时,它会导致 109.9998 导致位图绘制在像素 109 上。任何想法为什么我不能绘制到像素 110?请参阅下面的示例和输出:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

gluOrtho2D(0, 800, 800, 0);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glViewport(0, 0, 800, 800);

glRasterPos2f (100.0, 12);
glGetFloatv(GL_CURRENT_RASTER_POSITION, pos);
printf("%f\n",pos[0]);

glRasterPos2f (110.0, 30.0);
glGetFloatv(GL_CURRENT_RASTER_POSITION, pos);
printf("%f\n",pos[0]);

glRasterPos2f (111.0, 45);
glGetFloatv(GL_CURRENT_RASTER_POSITION, pos);
printf("%f\n",pos[0]);


Console Output:
    100.000000
    109.999992
    111.000015

更新:这似乎与我正在使用的 Ortho2D 和 glViewport 值有关。

4

2 回答 2

0

它似乎与我正在使用的 Ortho2D 和 glViewport 值有关。

事实上确实如此。虽然您当前的glOrtho/glViewport配置允许您直接在窗口(视口)空间中指定坐标并因此指定为像素,但它们仍会转换为规范化的设备坐标 ([-1,1]) 并在通过管道运行时返回。所以这就是你进入舍入错误的地方。

有关使用 OpenGL 进行像素完美渲染的一些想法以及为什么这不像最初看起来那么容易,请参阅这个问题及其答案。虽然我不完全知道这实际上如何应用于已弃用的像素绘图功能(无论如何都没人使用过)。

于 2013-06-25T13:30:14.650 回答
0

尝试glRasterPos2i改用并指定整数坐标。

于 2013-06-22T17:44:49.743 回答