Qt / OpenGL - 渲染的图元被扭曲

时间:2015-01-29 16:01:16

标签: c++ qt opengl user-interface opengl-es

我正在关注如何在Qt中使用OpenGL的youtube上的教程。我有两个班:

glWidget - >继承自QGLWidget; GLWindow - >继承自QMainWindow并有一个表单。

在GLWindow的表单中,我放置一个Widget并将其提升为glWidget,以便通过GLWindow上的Widget显示glWidget上呈现的内容。

我在glWidget中实现了以下继承的函数:

void glWidget::initializeGL()
{
    glClearColor(0.1, 0.1, 0.1, 1.0);
}

void glWidget::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT);

    glBegin(GL_TRIANGLES);
            glColor3f(0.2, 0.8, 0.1);
        glVertex3f(-0.5, -0.5, 0.0);
            glColor3f(0.8, 0.3, 0.9);
        glVertex3f(0.5, -0.5, 0.0);
            glColor3f(0.1, 0.1, 0.5);
        glVertex3f(0.0, 0.5, 0.0);
    glEnd();
}

我打算稍后使用着色器和缓冲区,但我很困惑为什么我的渲染原语出现如下:

GL Window sample

看起来三角形已经在世界空间而不是局部空间中被改变了。如果它在局部空间中,那么三角形将出现在屏幕的中心。我所指的教程可以在这里找到:https://www.youtube.com/watch?v=1nzHSkY4K18

我不知道我在这里做错了什么。起初我认为它与我的顶点有关,我知道这是立即模式,应该尝试使用缓冲区/着色器;但是我仍然想知道我在这里做错了什么。为什么三角形不会像教程中那样呈现?我应该在glWidget的构造函数中传递一些东西吗?

1 个答案:

答案 0 :(得分:2)

扩展QGLWidget时请记住,resizeGL()会自动调用:

  

resizeGL() - 设置OpenGL视口,投影等。每当调整窗口小部件时(以及第一次显示窗口小部件时都会调用它,因为所有新创建的窗口小部件都会自动获得调整大小事件)。

在您的情况下,Widget似乎会自动调整大小,因此解决方案就是覆盖它并将其清空。

扩展QGLWidget通常也是一种很好的做法,也可以覆盖resizeGL函数。