1条回答 默认 最新
关注 不知道你这个问题是否已经解决, 如果还没有解决的话:- 文章:Qt--OpenGL加载OBJ 3D模型 中也许有你想要的答案,请看下吧
- 除此之外, 这篇博客: QT中使用自带的OpenGL模块开发中的 1、使用指定版本的OpenGL。. 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
如下使用opengl4.5调用方法,使用指定版本的接口,必须设备图形显示设备支持对应OpenGL版本才可。
Q:什么是CoreProfile和Compatibility Profile?
A:在OpenGL的发展历程中,总是兼顾向下兼容的特性,但是到了一定的程度之后,这些旧有的OpenGLAPI不再适应时代的需要,还有一些扩展并不是驱动一定要实现的扩展,这些被统一划入可选的CompatibilityProfile;而由OpenGL规范规定必须支持的扩展,则是Core Profile,想要支持先进的OpenGL,相应的CoreProfile扩展必须被实现。所以如果使用#include < QOpenGLFunctions > 或者 #include <QOpenGLFunctions_4_5_Core>时,会发现如glDrawPixels等接口找不到的问题。所以我们使用Cmpatibility版本。所有opengl的接口函数都可以使用。#include <QOpenGLFunctions_4_5_Cmpatibility> //QOpenGLFunctions类提供了跨平台访问的OpenGL ES 2.0 API,QOpenGLFunctions提供了一个在所有OpenGL系统上都可用的保证API,并在需要它的系统上负责功能解析。使用QOpenGLFunctions的推荐方法是直接继承: class Widget : public QOpenGLWidget, protected QOpenGLFunctions_4_5_Cmpatibility { public: Widget(QWidget *parent = 0); ~Widget(); void initializeGL(); ///< 初始化 void resizeGL(int w, int h); ///< 当窗口发生变化时重新初始化 void paintGL(); ///< 绘制 }
void Widget::initializeGL() { //获取上下文 //QOpenGLFunctions_4_5_Compatibility* compatibility= QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_4_5_Compatibility>(); //compatibility->initializeOpenGLFunctions(); /* 0. 初始化函数,使得函数可以使用 */ initializeOpenGLFunctions(); const GLubyte* name = glGetString(GL_VENDOR); //返回负责当前OpenGL实现厂商的名字 const GLubyte* biaoshifu = glGetString(GL_RENDERER); //返回一个渲染器标识符,通常是个硬件平台 const GLubyte* OpenGLVersion =glGetString(GL_VERSION); //返回当前OpenGL实现的版本号 // const GLubyte* OpenGLExensions =glGetString(GL_EXTENSIONS); // QString str; str.sprintf("%s | %s | %s",name,biaoshifu,OpenGLVersion); qDebug()<<str; }
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^解决 无用评论 打赏 举报