zjq80163 2019-12-20 16:16 采纳率: 0%
浏览 515

QT3D场景中如何加载OpenGL画的实体?

在Qt5.12版本中图片说明
, QT3D场景加载Obj文件后, 可以用Qt自带的基本实体进行绘制, 但是由于没有绘制圆弧管的基本实体, 但是绘制上千个实体时出图的效率太低,
想请问: 如何在该场景中利用OpenGL画实体?能否提供这种混合编程的实例?谢谢!

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-20 19:24
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 文章: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;
      }
      

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥50 comsol稳态求解器 找不到解,奇异矩阵有1个空方程返回的解不收敛。没有返回所有参数步长;pid控制
  • ¥15 怎么让wx群机器人发送音乐
  • ¥15 fesafe材料库问题
  • ¥35 beats蓝牙耳机怎么查看日志
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功