将Qt、OpenGL、GLSL以及Qt的Graphics-View框架结合
九月份都快过去了,学生们也都开学了,我想校园也会热闹许多吧,在CSDN上也相应地热闹了一些。中秋节也过去了,自己身边还有很多没有吃完的月饼,于是将月饼作为早餐每天早上吃一个,希望这样不会浪费。
这个月的事情比较多,又比较忙,所以这么晚才能抽出时间写出一篇。这回介绍一下Qt对OpenGL的支持情况,话说半月前,我参加了上海地区的Qt研讨会,Digia那边的工程师介绍了一下Qt的发展情况,以及QML、Qt for Android、Boot to Qt的情况,让我们这些初学者们对Qt有了新的认识,现在Qt的模块非常庞大,Qt的贡献者有很多,使用Qt的人就更多了,估计有好几百万吧,它们或多或少使用着Qt的相关技术或部分技术,可以说,Qt正在默默地改变软件开发,使用Qt的人一定会越来越多的。
会上工程师回答了在座提出的各种问题,客观地说,有些问题实在是非常深奥,都扯上嵌入式那边去了,我只有听的份了。然后工程师回答了我一个关于Qt5和Graphics-View的问题,目前可以说处于这样的一种状态吧,Qt的QWidget大家族已经成熟,不会得到太大的发展了,而随着Qt5的发展,新的界面类会崭露头角,比如QWindow、QSurface、QScreen这些类。但现在的状况(Qt5.2即将出了),这些类和模块并不会对现有的GUI模块造成威胁,更不用说取代Qt4的GUI(在Qt5是QtGui和QtWidgets)模块了。自Qt4.4起,Qt拥有了Graphics-View框架,使用这个框架可以更加轻松地在窗口中嵌入任意你想要绘制的元素。但是据我所知,Qt5的那些类无法和Graphics-View框架进行整合,对于想要利用Qt中Graphics-View框架的同行们,只能退回Qt4的类进行开发了,Qt5的这些类对于创建纯OpenGL还是有利的。
在qt-project论坛上,有人提问如何实现底层是OpenGL渲染,上层是控件,其实Qt中有一个非常有代表性的例子程序,它叫boxes,看了它的人想必都会觉得它非常惊艳吧。以前没有时间去研究,这会儿我话了大概一个月的空余时间将其研究出来,并仿制了一个小程序,与君共勉。
此程序使用了Qt的core、gui、widgets和opengl模块,渲染了一个3ds模型。建模水平烂,就先凑合吧。下面是程序的截图:
演示程序下载地址:这里
程序源代码下载地址:这里