Qt5 缺少 opengl 标识符



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

QT += opengl widgets 

还包括opengl Qt5路径:

................QtQt5.0.15.0.1msvc2010includeQtOpenGL

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

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命令不识别

在.pro文件中添加此单词:

LIBS+=-lopengl32 -lglu32

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

#include <GL/gl.h> 

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

QT 5新的(更好的)方法是使用QOpenGLFunctions。QOpenGLWidget通过

提供对OpenGL函数的跨平台访问
context()->functions()->glxxxx. 

但是并不是所有的遗留函数都提供了:只有OpenGL 1的公共子集。x和es2.0。你必须以一种现代的方式重写你的OpenGL代码(顶点缓冲,着色器,…)。

你也可以使用更高的OpenGL配置文件与QOpenGLFunctions_X_X_profile包括文件,如:

#include <QOpenGLFunctions_4_3_core>

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

添加到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}
)

然后在source中:

#include <GL/glu.h>

这帮助我解决了Windows 10中gluPerspective()glFrustum()函数的问题。

是否正确包含GL/gl.h ?

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

相关内容

  • 没有找到相关文章

最新更新