所以我正在玩OpenGL并绘制位图,有时glRasterPos会被像素关闭。当我得到GL_CURRENT_RASTERPOSITION时,我可以看到rouding(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值有关。
答案 0 :(得分:0)
尝试使用glRasterPos2i
代替整数坐标。
答案 1 :(得分:0)
事实上确实如此。虽然您当前的这似乎与Ortho2D和我的glViewport值有关 使用
glOrtho/glViewport
配置允许您直接在窗口(视口)空间中指定坐标,因此作为像素,它们仍然会在通过管道时转换为规范化设备坐标([-1,1])并返回。所以这就是你得到四舍五入的错误。
请参阅this question及其答案,了解有关使用OpenGL进行像素完美渲染的一些想法,以及为什么这不像最初看起来那么容易。虽然我不完全知道这实际上如何应用于已弃用的像素绘制函数(无论如何都没有使用过)。