使用OpenGL进行像素完美的2D渲染

Jen*_*rer 4 c opengl

是否可以设置OpenGL场景以实现像素完美渲染和像素blitting?我注意到通过以下方式设置场景:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, width, height, 0.0, 0.0, 1.0);
Run Code Online (Sandbox Code Playgroud)

然后使用以下方法绘制像素:

glBegin(GL_POINTS);
glVertex2i(0, 0);
glEnd();
Run Code Online (Sandbox Code Playgroud)

难道不是一直画到每个硬件配置的左上角的像素(有时是一个像素向左,或者一个下面的左上角).我意识到这可能是由于图形驱动程序对OpenGL的不同实现,但是有没有办法让左上角的像素为(0,0),右下角为(width-1,height-1) )始终如一?这有点不标准化似乎很奇怪......

我见过一些使用(0.375,0.375)或(0.5,0.5)翻译的'hacks',但这似乎也解决了一些配置而不是其他配置.

she*_*heu 6

编辑:当,这是一个翻译.更新.

您还必须考虑像素的大小.这就是"翻译黑客"所得到的.如果最左边的像素应该具有中心坐标0.0,那么它的左边界位于-0.5- 并且这是裁剪平面应该的位置.类似地,如果最右边的像素应该具有中心坐标width - 1,那么它的右边界位于(width - 1) + 0.5- 并且那是剪切平面应该的位置.

所以尝试:

glOrtho(-0.5, (width - 1) + 0.5, (height - 1) + 0.5, -0.5, 0.0, 1.0);
Run Code Online (Sandbox Code Playgroud)

这就是翻译的来源.