填充整个小部件opengl

时间:2013-12-09 03:04:58

标签: c++ opengl

所以我正在使用2d数组,我正在尝试使用opengl在小部件上显示它。它似乎工作正常,但它没有正确填充小部件。而不是均匀填充它,它移动到右上方,如下图所示。我怎样才能让它居中? enter image description here

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();
    }
}

1 个答案:

答案 0 :(得分:1)

首先,你的代码的变量是错误的;例如int x = -0.1

现在,要解决问题,只需将其添加到代码的开头:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, 1, 1, 0, -1, 1);
glMatrixMode(GL_MODELVIEW);

问题在于您使用的是默认矩阵设置。基本上,它的范围从-1, -11, 1,而不是0, 01, 1。我无法完全阅读您的代码,但如果您可以编辑glOrtho函数的前4个参数(最后两个参数不应影响任何内容)来更改您正在绘制的内容的可见范围。

为了解释一下,第一个参数设置左侧,第二个右侧,第三个底部和第四个顶部。所以glOrtho(0, 600, 800, 0)表示将顶点设置为0, 0表示它显示在左上角,而设置为800, 600的顶点将显示在右下角。

您的设置仅显示了应该显示的内容的一部分,因为它的中心位于屏幕的一角。