所以我正在使用2d数组,我正在尝试使用opengl在小部件上显示它。它似乎工作正常,但它没有正确填充小部件。而不是均匀填充它,它移动到右上方,如下图所示。我怎样才能让它居中?
int x = -0.1;
int y = -0.1;
float lengthX = 0.9 / ROW;
float lengthY = 0.9 / COLM;
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COLM; j++) {
if (arr[i][j] == 1) {
glColor3f(1.0f, 1.0f, 1.0f);
} else {
glColor3f(0.0f, 0.0f, 0.0f);
}
glBegin(GL_QUADS);
// Q3 Q4 Q1 Q2
glVertex2f((-x) + 2 * i * lengthX, (-y) + 2 * j * lengthY);
glVertex2f(x + (2 * i + 1) * lengthX, (-y) + (2 * j + 1) * lengthX);
glVertex2f(x + (2 * i + 1) * lengthX, y + (2 * j + 1) * lengthY);
glVertex2f((-x) + 2 * i * lengthX, y + 2 * j * lengthY);
glEnd();
}
}
答案 0 :(得分:1)
首先,你的代码的变量是错误的;例如int x = -0.1
。
现在,要解决问题,只需将其添加到代码的开头:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, 1, 1, 0, -1, 1);
glMatrixMode(GL_MODELVIEW);
问题在于您使用的是默认矩阵设置。基本上,它的范围从-1, -1
到1, 1
,而不是0, 0
到1, 1
。我无法完全阅读您的代码,但如果您可以编辑glOrtho
函数的前4个参数(最后两个参数不应影响任何内容)来更改您正在绘制的内容的可见范围。
为了解释一下,第一个参数设置左侧,第二个右侧,第三个底部和第四个顶部。所以glOrtho(0, 600, 800, 0)
表示将顶点设置为0, 0
表示它显示在左上角,而设置为800, 600
的顶点将显示在右下角。
您的设置仅显示了应该显示的内容的一部分,因为它的中心位于屏幕的一角。