从 Qt creator 访问 Modern OpenGL 函数
Posted
技术标签:
【中文标题】从 Qt creator 访问 Modern OpenGL 函数【英文标题】:Accessing Modern OpenGL functions from Qt creator 【发布时间】:2014-04-30 19:42:47 【问题描述】:我正在使用 Open GL 3.0
我正在尝试将此示例更新为现代 OpenGL: http://qt-project.org/doc/qt-4.8/opengl-hellogl-es.html
我也在看这个例子: http://qt-project.org/doc/qt-5/qtopengl-cube-example.html
我正在查看 OpenGL ES 示例,因为它们可以在我的机器上轻松编译和渲染,而 OpenGL ES 2 示例使用了一些可编程流水线。
我想使用本教程中引用的管道函数: http://www.opengl-tutorial.org/beginners-tutorials/tutorial-2-the-first-triangle/
例如 glGenBuffers()
然而,这似乎并没有出现在开放的 Qt 中。如果我尝试编译使用 glGenBuffers 或 glBindBuffer 的程序。
为什么我可以使用某些 Open GL 函数而不能使用其他函数?
看第二个例子(OpenGL ES2)有一个类型“QGLShaderProgram”,它似乎包含了一些着色函数,但我不知道如何遵循一个简单的开放 GL 教程,完全访问渲染功能。
例如,openGL 教程引用了至少六个我似乎无法使用的函数。我对此很好,但我似乎无法找到 Qt 人员在哪里解释了哪些功能被包装、或掩盖或不存在。
我可能缺少包含或其他内容吗?
我包括#QGLWidget 和#QtOpenGL
【问题讨论】:
您不必使用包装类。 Qt 提供了一个可以继承的类(例如QGLFunctions
或QOpenGLGLFunctions
),如果您的平台支持,它将为您提供在运行时加载的可调用函数。它有点像 GLEW,只是不那么广泛。
我怀疑一个问题是 glGenBuffers 来自 OpenGLES,并非所有版本的 Qt 都支持。
@Jay 不是来自 ES;它来自OpenGL 1.5+。如果 Qt 不支持那么旧的东西,我会感到非常惊讶。
@AndonM.Coleman 我发现了!在正确回答/关闭之前,我正在检查这些功能是否正常工作。
@ColonelThirtyTwo 它在 khronos 上的 opengles 树中列出:khronos.org/opengles/sdk/docs/man/xhtml/glGenBuffers.xml 也许它也被采用到 1.5 版中
【参考方案1】:
请参阅下面我对您问题的回答。但是,您似乎正在寻找一个simpler OpenGL example with Qt,就像您链接到的三角形一样。 I also made an introductory post here 在开始示例之前,您可以在这里学习 Qt 和 OpenGL 如何协同工作的基础知识。
首先现在使用 Qt 5.5。它默认配置了 -opengl 动态选项,这可能会解决您的问题。如果您在 Qt 5.5 之前的版本中没有设置 -opengl 桌面配置选项,那么除了 Qt 支持的所有平台支持的 OpenGL ES 2 子集之外,您将无法访问现代 OpenGL 功能。
其次,不要使用 QGL* 函数或类,因为它们现在已过时/已弃用。它们被 QOpenGL* 函数和类所取代。
至于包含,您将需要一个 QOpenGLFunctions 或 QOpenGLFunctions_3_0 来确定您将获得哪组函数。您还需要任何其他类,例如 QOpenGLBuffer QOpenGLVertexArrayObject... 或者只包含 QtGui,因为这是所有 OpenGL 函数和类现在所在的位置。
【讨论】:
以上是关于从 Qt creator 访问 Modern OpenGL 函数的主要内容,如果未能解决你的问题,请参考以下文章
Ubuntu20.04安装配置卸载QT5.9.9与QT creator以及第一个编写QT程序
Qt Creator 链接器错误:LNK1104:无法打开文件“opencv_core249d.lib”