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

Posted

技术标签:

【中文标题】Qt/OpenGL - 渲染的图元被扭曲【英文标题】:Qt/OpenGL - rendered primitives are distorted 【发布时间】:2015-01-29 16:01:15 【问题描述】:

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

glWidget -> 从 QGLWidget 继承; GLWindow -> 继承自 QMainWindow 并有一个窗体。

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

我在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();

我计划稍后使用着色器和缓冲区,但我不明白为什么我的渲染图元看起来像这样:

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

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

【问题讨论】:

你是否实现了 resizeGL 并将其留空? 谢谢,现在可以正常渲染了! 好的,我会为以后的读者解答。 【参考方案1】:

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

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

在您的情况下,小部件似乎会自动调整大小,因此解决方案是覆盖它并让它为空。

在扩展 QGLWidget 时,最好同时覆盖 resizeGL 函数。

【讨论】:

以上是关于Qt/OpenGL - 渲染的图元被扭曲的主要内容,如果未能解决你的问题,请参考以下文章

Qt OpenGL 渲染文本问题 QGLWidget

QT opengl多线程实现原理

Horde3D 粒子系统不在 Qt OpenGL 中渲染

寻找例如使用 FTGL 和 Qt (OpenGL)

qt opengl的图形怎么刷新

OpenTK 屏幕外帧缓冲区扭曲并使用相同的材​​料不正确地渲染?