4

我尝试编译简单的 Qt 应用程序并将其移植到我包含 opengl 标志的 pro 文件中的 Qt5:

QT += opengl widgets 

还包括 opengl Qt5 路径:

..\..\..\..\..\..\..\..\Qt\Qt5.0.1\5.0.1\msvc2010\include\QtOpenGL

但是当我编译应用程序时,我得到了那些编译错误

1>qmpwidget.cpp(148): error C3861: 'glClearDepth': identifier not found
1>qmpwidget.cpp(159): error C3861: 'glLoadIdentity': identifier not found
1>qmpwidget.cpp(167): error C2065: 'GL_QUADS' : undeclared identifier
1>qmpwidget.cpp(167): error C3861: 'glBegin': identifier not found
1>qmpwidget.cpp(168): error C3861: 'glTexCoord2f': identifier not found
1>qmpwidget.cpp(168): error C3861: 'glVertex2f': identifier not found
1>qmpwidget.cpp(169): error C3861: 'glTexCoord2f': identifier not found
1>qmpwidget.cpp(169): error C3861: 'glVertex2f': identifier not found
1>qmpwidget.cpp(170): error C3861: 'glTexCoord2f': identifier not found
1>qmpwidget.cpp(170): error C3861: 'glVertex2f': identifier not found
1>qmpwidget.cpp(171): error C3861: 'glTexCoord2f': identifier not found
1>qmpwidget.cpp(171): error C3861: 'glVertex2f': identifier not found
1>qmpwidget.cpp(172): error C3861: 'glEnd': identifier not found

其他opengl命令确实认识到我在这里缺少什么?

4

4 回答 4

2

在 .pro 文件中附加这个词:

LIBS+=-lopengl32 -lglu32
于 2018-08-21T03:09:47.883 回答
1

如果你想使用旧的 OpenGL API,你必须添加

#include <GL/gl.h> 

并将您的应用程序链接到您的本机平台 opengl 库(请参阅 QtCreator .pro 文件文档来执行此操作)。

QT 5 的新(更好)方法是使用 QOpenGLFunctions。QOpenGLWidget 通过以下方式提供对 OpenGL 函数的跨平台访问

context()->functions()->glxxxx. 

但并非提供所有遗留功能:仅提供 OpenGL 1.x 和 ES 2.0 的公共子集。您必须以现代方式重写您的 OpenGL 代码(顶点缓冲区、着色器等)。

您还可以将更高的 OpenGL 配置文件与 QOpenGLFunctions_X_X_profile 包含文件一起使用,例如:

#include <QOpenGLFunctions_4_3_core>

要使用这个更高版本的 OpenGL,您还需要为您的 QOpenGLWidget 提供兼容的 QSurfaceFormat。

于 2016-03-31T15:43:27.143 回答
0

要添加到LinWM 的答案,使用 CMake 会是这样的:

# ...

find_package(OpenGL REQUIRED)
find_package(Qt5 REQUIRED Widgets)

# ...

target_link_libraries(${CMAKE_PROJECT_NAME}
    general Qt5::Widgets ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY}
)

然后在来源中:

#include <GL/glu.h>

这帮助我解决了 Windows 10 上的问题gluPerspective()glFrustum()功能。

于 2021-02-11T14:53:26.240 回答
-3

您是否GL/gl.h正确包括在内?

Qt 本身只定义了一小部分 OpenGL 函数供内部使用,独立于系统安装的头文件。我有点惊讶,glClearDepth但所有其他功能和令牌都已从 OpenGL-3 及更高版本中删除,Qt5 不使用它们。

于 2013-05-16T13:41:53.810 回答