【问题标题】:fill entire widget opengl填充整个小部件opengl
【发布时间】:2013-12-09 13:03:39
【问题描述】:

所以我正在使用 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();
    }
}

【问题讨论】:

  • 你的矩阵设置是什么?另外,ROWCOLM 设置的变量是什么?
  • @Alex Larsen 他们都设置为 100,const int ROW = 100, COLM = 100;
  • @Alex Larsen 是一个包含 0 或 1 值的数组

标签: c++ opengl


【解决方案1】:

首先,您的代码的变量有误;如int x = -0.1

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

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

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

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

您的设置只显示了它应该显示的一部分,因为它的中心是屏幕的一角。

【讨论】:

  • 如果我改变数组的大小,有没有办法保持纵横比?当我改变它时,它超出了小部件,我在这里看不到它i.imgur.com/B1sPmjt.png
  • 我不知道你在说什么。如果你的意思是调整你看到的大小,你可以使用glViewport(0, 0, width, height)。如果您的意思是确保它不会拉伸,则需要相应地调整视口(正如我刚才提到的),并像您拥有的那样进行一些数学和绘图,或者使用顶点着色器,这需要更多的工作并且需要更多数学,但可以做得更好。
  • 我能问你一些关于我在这里工作的问题吗? chat.stackoverflow.com/rooms/42765/openglhelps
猜你喜欢
  • 1970-01-01
  • 2021-11-13
  • 2017-03-05
  • 2020-07-06
  • 2012-08-06
  • 2011-04-07
  • 2015-04-09
  • 2011-03-25
相关资源
最近更新 更多