Qt Creator 的设置过剩[重复]

问题描述 投票:0回答:2

我想将 OpenGL 与 glut 与 Qt 创建者结合起来。 我使用的是 Windows,我的 QT 版本是 4.7.4,32 位。

我按照教程进行操作:

http://www.youtube.com/watch?v=1nzHSkY4K18

我也查了一些其他人的问题,但他们没有给我答案。

包含过剩之前的部分效果很好。 但当我试图包括过剩时,它不起作用。 错误是:

对 glutInit_ATEXIT_HACK 的未定义引用

以及更多对 glutfunctions 的未定义引用。

我将 glut-libraries 和标头复制到 Minwg 文件夹中的相应文件夹中。 但我不确定这是否是正确的文件夹。

我是否必须为 Qt 获取特殊的 glut 和 OpenGL 库?我必须把它们放在哪里?

c++ qt opengl glut
2个回答
3
投票

我想将 openGL 与 glut 结合到 QT 创建者

为什么? Qt 可以完成 GLUT 所做的一切,甚至更多。如果您已经在使用 Qt,则不需要 GLUT。你的要求毫无意义。

因评论而更新

首先:QGLWidget 可以完成 GLUT 所做的一切,甚至更多。基本思想是从 QGLWidget 派生自定义 Widget 类并重写一些虚函数。 paintGL 是您通常注册的 GLUT 显示函数。还有resizeGLinitializeGL

仅当窗口更改后需要重新初始化某些资源(例如后处理 FBO 纹理附件等)时,才需要调整大小。 不要,我重复一遍不要将 glViewport 或投影设置之类的东西放在那里。它不属于那里。属于显示功能。

initializeGL 应该用于加载纹理和其他一次性的东西。不要在那里打电话

glEnable(GL_DEPTH_TEST)
之类的。这也属于显示功能。

所以基本要点变成了

class MyGLWidget : public QGLWidget 
{
Q_OBJECT
public:
    MyGLWidget(QGLWidget *parent):
        QGLWidget(parent)
    {}

protected:
    virtual void paintGL();
    virtual void resizeGL();
    virtual void initializeGL();
}

在显示函数末尾调用 QGLWidget::swapBuffers,而不是 glutSwapBuffers。


1
投票

我是否必须为 QT 获取 glut 和 openGL 的特殊库?我必须把它们放在哪里?

不可以,但是 OpenGL 和(可选的 Glut)应该可以位于您的包含路径和库路径中。该错误表明它们不在包含路径中,或者您没有包含它们。

我第二个datenwolf。您不需要同时使用 Qt 和 Glut。如果您仅使用 glut 作为辅助函数(gluLookAt、gluQuadrics),您可以相当轻松地复制它们或简单地通过 google 进行复制。

© www.soinside.com 2019 - 2024. All rights reserved.