我正在研究2d引擎.它已经工作得很好,但我不断得到像素错误.
例如,我的窗口是960x540像素,我从(0,0)到(959,0)画一条线.我希望扫描线0上的每个像素都会被设置为一种颜色,但是没有:最右边的像素没有被绘制.当我垂直绘制到像素539时,同样的问题.我真的需要绘制到(960,0)或(0,540)来绘制它.
由于我出生在像素时代,我确信这不是正确的结果.当我的屏幕大于320x200像素时,我可以从0到319以及从0到199进行绘制,我的屏幕将会满.现在我最终得到一个没有绘制右/底像素的屏幕.
这可能是由于不同的原因:我期望将opengl线基元从像素绘制到包含像素,最后一个像素实际上是独占的?是吗?我的投影矩阵不正确?我有一个错误的假设,当我有一个960x540的后备缓冲区时,实际上有一个像素更多?别的什么?
有人可以帮帮我吗?我一直在研究这个问题很长一段时间,每当我认为它没问题的时候,我看了一会儿它实际上没有.
这是我的一些代码,我试图尽可能地删除它.当我调用我的线函数时,每个坐标都加上0.375,0.375,以使它在ATI和nvidia适配器上都正确.
int width = resX();
int height = resY();
for (int i = 0; i < height; i += 2)
rm->line(0, i, width - 1, i, vec4f(1, 0, 0, 1));
for (int i = 1; i < height; i += 2)
rm->line(0, i, width - 1, i, vec4f(0, 1, 0, 1));
// when I do this, one pixel to the right remains undrawn
void rendermachine::line(int x1, int y1, int x2, int y2, const vec4f &color) …Run Code Online (Sandbox Code Playgroud)