OpenGL绘制教室,带你亲手编程浅识高大上的VR技术

来源:互联网 发布:哪个软件下载最快 编辑:程序博客网 时间:2024/05/22 02:19

  之前上过一门选修课叫虚拟现实与数据可视化,也就是最近大火的VR。很多人觉得VR听起来很高大上,其实本质上就是用一些计算机图形学的方法去在计算机中表达重现出真实的三维场景,并加入漫游,配合VR眼睛和头盔就能让人体验漫游在一个虚拟的三维空间中的功能,这个应用最广泛的就属各种游戏了。因为有unity3d以及unreal等各种强大的游戏引擎的出现,让游戏中场景重现显得更加逼真和绚丽。当然万丈高楼平地起,想要进入VR的大门,最接地气的工具之一就是OpenGL了。

本文详细讲解了使用OpenGL函数库,借助于VS平台,在计算机中实现虚拟三维场景——一间大学教室的绘制。只要读者具备基本c++或c语言知识,即可看懂。并在文章结尾处附上源码,大家一起学习一起进步~

OpenGL是什么?具体定义请戳链接OpenGL_百度百科 。这里有它官网上的一个截图


下面一行小字儿,从游戏到虚拟现实,手机到超级计算机。这句简介强有力的表明了openGL在诸多领域都有着很深的运用。题主自己简单的理解就是为了在计算机中实现三维图像绘制,渲染,灯光材质纹理贴图等等功能的一个函数工具包。里面有各种实现好的函数,对于学者,只要理解它们会用就ok了。当然如果你有兴趣也可以去看,或者自己尝试实现那些底层代码,官网上都有资料。OpenGL - The Industry Standard for HighPerformance Graphics

下面我就把自己利用OpenGL在c++平台上绘制一个三维虚拟教室的过程分享一下,画的比较粗糙,是当时的一份课程作业。不过基本方法都差不多,有兴趣的同学可以做出更多的优化。先上图~

【投影仪升起】


【投影仪放下】

【朝左】

【朝右】


下面我们开始~

【1】首先第一步是在C++平台上配置OpenGL:下载请戳有VS2010,2013的童鞋请戳这里:OpenGL学习入门之VS2010环境配置 [转];使用VC++6.0的童鞋请戳这里VC6.0 OpenGL库配置详解

【2】我们知道,教室在三维空间中其实可以简化为一个长方体,具体能看到这个长方体的哪一面,取决于我们眼睛的位置,和我们眼睛所看的位置,如果我们站在教室的正中央,那我们平视前方就应该看到与我们眼睛等高的教室前墙上的点。关于这一点,OpenGL为我们提供了一个函数叫做gluLookAt(x1,y1,z1,x2,y2,z2,0,1,0),这个函数有九个参数,前面三个是眼睛的空间坐标,中间三个是你所看的点的空间坐标,最后一个是眼睛的朝向,因为你有可能歪着头看~好了,下面开始正式绘制,教室的六个面均可使用GL_QUADS来实现,只要定下教室的大小以及在空间坐标系中的位置,即可定下八个顶点坐标。废话不多说,先上代码:



这里注释基本上写的很清楚,openGL的函数基本上都可以根据函数的名字来判断其功能。这里我们绘制教室,基本上可以简单的都用长方形解决。另外还有画直线glBegin(GL_LINES)等,大家可以自行在教程中找。后面会推荐题主认为好的教程。按照这个方案,我们可以画好出一个长80,高30,宽60的教室模型。

下面要做的就是在这个教室中添加桌子板凳,投影仪,窗户,黑板,讲台等。我们一步步来:

【窗户】窗户可以和左右墙一起绘制:


我们关键是要自己先画个草图,具体窗户分配在墙面上哪个位置,我们可以先在纸上写出坐标,别的物件也是一样。主要是其在你刚刚绘制出的那个长方体中的位置的确定。

【空调】


下面再详细讲下投影仪的实现。投影仪我们知道上课会打开,下课会关闭。所以我这里用按键是否按下来打开或者关闭投影仪。


更多代码看源码吧~这里就不再贴了,注释都在里面写了。

最后,场景画好了,如何实现漫游功能呢。我们可以想一下,漫游实际上就是你在一个场景中,你既可以前后左右平移,你的视角也可以随处的变化,你可以通过两者结合看到这个场景里任何一个角落。那么这里就要用到前面讲的那个函数gluLookAt(x1,y1,z1,x2,y2,z2,0,1,0)

x1,y1,z1,以及x2,y2,z2可以通过w,s,a,d键是否按下而增减,从而导致“眼睛”在这个虚拟教室的位置发生平移,角度可以通过pgup和pgdn键增减,代表看的角度,仰头或者低头。具体代码可以用case和break语句实现,执行效率较高。可以看一点:


至此为止,基本上重点都讲完了。细节大家可以自行去看,这里推荐几个比较好的OenGL教程。

【1】OpenGL入门教程(精)_图文(没有下载劵的童鞋可以私信我哦,最近学校买了百度文库的账号啥都可以下载啦~)

【2】专栏:一步步学OpenGL3.3+ 官网推荐的专栏,靠谱!

最后是宝宝的源码哦:openGL绘制虚拟教室,这个是我上传到csdn上要积分的。看关注人数再考虑要不要上传一份不要积分的吧~~~


3 0
原创粉丝点击