欢迎来到天天文库
浏览记录
ID:12612947
大小:33.00 KB
页数:4页
时间:2018-07-18
《基于opengl的3d天空仿真》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、基于OpenGL的3D天空仿真在进行3D场景渲染时,天空是必不可少的因素。对于3D天空的模拟在视景仿真系统、计算机游戏、三维动画中有着广泛的应用。但是,目前对于天空的仿真还存在很多不足,一些模拟方法中存在实现复杂、计算耗时、图像分辨力不高,真实感不强且只能生成静态图像等问题。本文在研究了前人仿真天空算法的基础上,利用目前3D图形行业中流行的OpenGL技术和有被誉为"大自然的几何学"美称的分形理论,提出了一种更加简单实用的仿真3D天空的方法,可以仿真出具有动态效果和不同天气的3D天空,绘制速度快,真实感强。l构造天空模型1.1OpenGL技术[1.2]OpenGL作为一套图
2、形标准,由数百个功能函数组成,提供了访问图形硬件的所有特性,其严格按照计算机图形学原理设计而成,符合光学和视觉的原理,非常适合可视化仿真系。其优势在于:首先,在OpenGL中,允许视景对象用图形方式表达;其次,OpenGL通过光照处理能表达出物体的三维特性,其光照模型是整体光照模型。可视化仿真图像的颜色体现着物体与视点以及光源之间的空间位置关系,具有很强的三维效果。此外,为弥补图形方法难于生成复杂自然背景的不足,OpenGL提供了对图像数据的使用方法,即直接对图像数据读、写和拷贝,或者把图像数据定义为纹理与图形方法结合在一起生成视景图像以增强效果。本文研究了基于OpenGL
3、技术的3D天空仿真,使得算法易于实现,并且有很好的可视化效果。1.2传统模型在传统的3D游戏中,对于天空的仿真,程序员往往从实时简单的角度出发,采用非常简化的天空模型,通常包括以下3种方法[3-5]:用一种接近天空的淡蓝色来清除背景;采用天空盒(skyBox)的方法:即首先绘制一个多边形,然后进行立方体纹理贴图;八棱锥天空模型:定义一个天顶,以这个顶点为中心绘制一圈三角形扇,然后进行纹理映射。这3种方法都具备了实时性,方法简单的优点,但同时也存在明显的不足,第一种方法绘制的天空效果看起来太平面化,简单粗糙,逼近度不高。第二种方法对纹理的要求非常高,如果纹理使用得不好,在一个
4、比较大的多边形上的纹理就容易产生拉伸变形的副作用。此外,雾化设置也会产生问题,如果雾的设置靠近观察点,则天空的颜色会变淡甚至没有。第三种方法有明显的天顶。显然,在如今这种对3D场景仿真要求越来越高的时代,这些方法已经不适应时代的要求,需要寻求一种渲染速度快,真实感强,有一定交互能力的3D天空模型。1.3半球型天空模型地球是球型的,所以天空像半个球一样笼罩在大地之上。在用计算机仿真3D天空时,半球型天空模型显然符合真实世界的天空模型。利用数学中的球面方程,可以建立如下模型:P是球面上一点,R为球的半径。在球面坐标系下方程改写为:对于一个半球.φ为纬度,其变化范围是O≤φ≤90
5、°;θ为经度,其变化范围是O≤θ≤360°。采用球型(DOme)的方法,比起采用盒子(BOx)的方法,有很多优点。首先由于球形方法绘制的天空具有更多的顶点,雾化效果可以绘制得更加均匀[5]。同时也可以实时改变单个顶点的颜色,这样可以获得一些非常好的效果,如一天不同时刻的太阳光。半球型天空模型也存在不足:(1)顶点数目过多,影响渲染速度。N为所需要绘制的顶点总数;△φ,△θ为绘制球型天顶的顶点经纬度间隔,值越小、网格越密,绘制越精细。由于采用OpenG技术中的三角形带绘制(GL-TRIANGLE一STRIP),每次绘制4个顶点,每个顶点被绘制4次,故需要乘以4。(2)三角函数
6、的运算过多。在单一场景的渲染中不会影响渲染速度,但在复杂的3D场景中,渲染速度的劣势会体现出来。因为在计算机中三角函数的运算较之加、减、乘、除等运算要慢的多。1.4曲面天空模型为保持球型天空模型的优势并弥补该算法的不足,本文研究了一种渲染速度更快的曲面天空模型,该模型如图1所示。该模型类似于将一个经过细分的平面的4个角点向下拉,形状看上去像一个撑开的降落伞,将他罩在场景之上,可以模拟3D天空。曲面的长度为S为:顶点坐标(x,y,z)的计算公式为: 其中△s为曲面细分间隔;j,i为循环参数。曲面天空模型仍然可以用OpenGL技术中的三角形带((GLTRIANGLE_STRIP
7、)绘制,但他避免了三角函数的运算,且顶点数目比相同精度的球型天空模型少,故增加了渲染速度。2天空云图2.1分形云图分形[4]方法建造的物体模型结构精细、算法控制相对简单,适合于描绘云、树等结构精细的物体。本文利用分形理论中的插值算法产生静态天空云图纹理,算法如下:(1)在平面上划分正方形网格n×n,随机给A1,A2,A3,A4这4个角点的颜色。如图2所示。(2)计算中点值,B1=(A1+A2+A3+A4)×0.25+ξ×scale,其中ξ是一个随机量;Scale一(1/2)H(标度)H即Hurst指数,他也是分形维
此文档下载收益归作者所有