您的位置:首页 > 编程语言 > Qt开发

在Qt4中使用OpenGL

2016-05-07 17:51 387 查看
        我们知道,一般的OpenGL教材用到展示OpenGL的窗口界面一般都是GLUT。这是因为GLUT是跨平台的而且窗口非常简单,因此非常有利于例子的展示,这是因为例子对于读者来说应该越精简越好。

        然而如果我们想设计自己的复杂交互界面,而OpenGL仅仅是其中用于图形展示的一项功能,那么GLUT将会无能为力。而我们将会用到专用的图形用户界面,如MFC、Qt等来设计自己的复杂界面。由于GLUT的初衷仅仅是为了提供OpenGL有一个简洁的例子展示窗口,因此它的功能肯定是所有复杂的图形用户界面所共有的功能,也就是说,GLUT能实现的功能,MFC、Qt必定能实现,反之不然。

        而笔者选择Qt,因为Qt本身就带有OpenGL的接口,这是浑然天成的,因为它们都是跨平台、开源的软件,很自然会把它们捆绑在一起。而Qt的程序编写要比MFC简单得多,而MFC只能在Windows下编译并运行,因此这也是笔者特别钟爱Qt的原因。

        在这里,笔者还是选择比较旧的Qt4版本,虽然现在Qt的官网贴的都是Qt5的下载链接,或者说官网有一种推荐你使用Qt5的倾向。但是现在还没有出现一本媲美《C++ GUI Qt 4编程(第二版)》的Qt5的相关书籍,而笔者现在也暂时不需急着用Qt5,也懒得去学(Qt5不能兼容Qt4,因此还是有区别的),因此笔者这里还是以Qt4为例子。

        然而,Qt4还能下载



固定功能管线下的Qt4,OpenGL例子

        从上一篇文章我们已经知道,OpenGL分为固定功能管线和可编程管线,这里先讲一下Qt4中使用固定功能管线的例子,这是因为该例子在《C++ GUI Qt 4编程(第二版)》P353中照搬过来的,有借鉴意义。

        代码链接: http://pan.baidu.com/s/1skBIjbn 密码: 4nrx

        由于笔者用的是Qt4.8.5,因此与原书中的例子有轻微区别,读者自行对比。

可编程管线下的Qt4,OpenGL例子

1.使用Qt4自己的OpenGL可编程管线API

        笔者参考自Qt官网,和GitHub网站,笔者对GitHub上的程序作了简化,链接: http://pan.baidu.com/s/1eRUv1M6 密码: hffd
        然而笔者直接运行GitHub的代码,没有任何问题。这与Qt官网上的说明有出入,因为官网上说,使用Qt的可编程管线API不需要创建并绑定顶点数组对象,但如果是在Windows下运行的话,则必须要创建并绑定顶点数组对象。然而GitHub的代码没有这么做,在Windows下依然运行得很好。
        而程序中glFormat也没有setVersion,setProfile,setSampleBuffers这些方法。
        并且有一点要注意,Qt官方读取着色器文件的做法是,把着色器文件放在Qt的资源中来读取的,并不是利用C语言的文件函数来读取的。

2.使用OpenGL本身的可编程管线API+GLEW嵌入Qt4程序中

        上面已经提到,Qt4有自己的OpenGL可编程管线API,为什么呢?这是因为Windows自带的OpenGL库仅仅支持OpenGL1.0的API,而可编程管线API是OpenGL3.0之后才有的东西,而要使用可编程管线,则需要有OpenGL3.0之后版本的API才行,而Qt为我们提供了这些API。
         这里我们总算懂为什么很多的OpenGL程序都使用GLEW了吧(包括红宝书的例子),这是因为我们必须使用OpenGL3.0之后的可编程管线API,而GLEW库实现了这些API,从而我们就能够使用这些API了(红宝书第8版中文版P598)。
        这里笔者把《交互式计算机图形学 基於OpenGL着色器的自顶向下方法(第6版) 》第二章第一个例子套入并覆盖了上面第一个例子,运行得不错,而且也不需要添加glewExperimental= GL_TRUE;
        当然,移植进Qt4必须进行一些修改,链接: http://pan.baidu.com/s/1mi5wYnA 密码: r5en
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: