浅谈Qt对OpenGL(ES)2.0以及高级OpenGL_API的支持
2013-07-13 23:30
393 查看
浅谈Qt对OpenGL(ES)2.0以及高级OpenGL_API的支持
Qt5相比Qt4有了很大的改变,对OpenGL这一部分支持的力度加大了。如果说Qt5.0对OpenGL这部分的改变还是试验性的,那么Qt5.1中与OpenGL相关的函数和封装则是优化和一些小小的微调。早在Qt5.1还没有发布的时候,国外就有高手发布了Qt5.1对OpenGL支持的相关特性(链接在这里)。Windows系统是一个固步自封的系统,对OpenGL的官方支持只到OpenGL1.1。还好各大显卡厂商还算有节操,通过替换opengl32.dll成厂商自己的opengl32.dll实现对OpenGL扩展的支持。Linux系统是一个开源的系统,虽然由于架构的原因对GUI的支持并没有Windows和Mac OSX那么好,但是对OpenGL的支持是相当的好,各大显卡厂商也推出了适合Linux的OpenGL的显卡驱动。最后一些开源力量也对OpenGL的支持作出了杰出的贡献。Mesa提供了对OpenGL几乎所有API的软件实现,所以如果在无法启动硬件加速的机器上,使用Mesa提供的实现也未尝不可。
如果使用glut框架的话,那么要使用OpenGL高级的API,就必须配合使用glee这个简易的扩展。而glew的出现就是用一个框架代替glut + glee,Qt则更进了一步。因为严格来说,OpenGL的基本API是基于C语言的,Qt对这些API进行一定程度的封装,并使用C++的诸多概念,让这些API能够真正地做到易用。
接下来我就介绍一下其中的一个类吧。
QOpenGLFunctions类,在Qt4中叫QGLFunctions,它的作用是提供一套OpenGL(ES)2.0API,免去开发人员手动解析这些函数符号。如果你使用glut和glee,那么你一定深有感悟。如果你看过glee的源码和QOpenGLFunctions,那么应该知道,其实QOpenGLFunctions和glee的作用是一样的。它可以绑定VBO,指定Shader等等。最常用的方式应该是在一个GLWidget中直接继承自它,这样可以在这个GLWidget的paintGL()函数中直接调用gl开头的函数了。这也是OpenGL开发人员常见的编码方法,但编译的时候就会发现其实这些gl开头的函数其实是被封装过了的。在使用这些gl开头的函数之前,需要注意调用initializeOpenGLFunctions()函数确保这些函数正确地被解析。
下面是我自己写的一个小例子,它产生和绑定了VBO,使用索引绘制图形,产生和绑定了Color Buffer Object,绘制了一个颜色立方体(color cube)。使用的是Qt5.1构建。值得注意的是我使用了Enginio库,用户可以浏览该程序的反馈,也可以将对这个程序反馈发送到Enginio后端。这是一个很好的尝试,我可以从中了解大家对我写的例子程序的意见和建议。
演示程序:这里
程序源代码:这里
相关文章推荐
- 浅谈Qt对OpenGL(ES)2.0以及高级OpenGL_API的支持
- Opengles 2.0 错误 called unimplemented OpenGL ES API
- Google Maps API 2.0解析(13-支持以前1.0版本的GMap)
- 利用glut和glew查看openGL的版本以及支持扩展的信息等
- call to OpenGL ES API with no current context 错误及解决方案
- arcgis3.17 js api 支持高级查询
- ANDROID “call to opengl es api with no current context”错误的解决
- OpenGL ES API简要介绍
- Hibernate版本 支持 hibernate-jpa-2.0-api-1.0.0.Final.jar
- Google Maps API 2.0解析(3-GEvent事件功能支持)
- YII2 advanced 高级版本项目搭建-添加API应用以及多应用(一)
- Android: call to OpenGL ES API with no current context (logged once per thread)
- Android OpenGLES2.0(六)——构建圆锥、圆柱和球体
- ANDROID “call to opengl es api with no current context”错误的解决
- call to OpenGL ES API with no current context (logged once per thread)
- 【OpenGL/ES系列教程】 第二讲 Android jni 调用OpenGL ES 2.0
- WebSocket的原理,以及和Http的关系 一、WebSocket是HTML5中的协议,支持持久连接;而Http协议不支持持久连接。 首先HTMl5指的是一系列新的API,或者说新规范,
- call to OpenGL ES API with no current context (logged once per thread)
- 13 API-常用类(StringBuffer,数组高级以及Arrays,基本类型包装类{Integer,Character})
- 学习《Android3D游戏开发技术宝典:OpenGL.ES.2.0》一:初识OpenGL ES 2.0应用程序