会员: 密码:  免费注册 | 忘记密码 | 会员登录 网页功能: 加入收藏 设为首页 网站搜索  
游戏开发 > 程序设计 > 3D图形
如何构建天空盒
发表日期:2007-03-18 15:01:42作者: 出处:  

 为了减少在这篇文章中的源代码,我们假定一些现有的类提供了基本的函数。
CMatrix -- 4X4的矩阵
CVector# -- 2,3,4部分浮点矢量
CDoubleLink -- 自己做的双连表
在我的世界中,开始指向点(0,0,1),每个部分,如材质管理没有覆盖。

源文件

在源文件中,关于天空盒实际的部分很少,但关于他的原理很多。在源文件中包含以下文件。
你可以在下面的地址下载源代码。(http://www.lihuasoft.net/uppic/d_0703180318240.zip本地下载

Skydome.cpp ,skydome.h ---支持天空盒
Skyclouds.cpp,skyclouds.h ---支持有云和星的天空
Skybodys.cpp ,skybodys.h --支持在太阳,月亮和他们周围的光芒
OGLRederer.cpp ---从我们的渲染器中取出资源
ViewerView.cpp --取出的资源包括程序的初始化,云和物体。
在这些文件中的源代码非常好懂,并详细的阐述了每个细节。

天空盒

天空盒是一个球体的顶部,我们在游戏中通常是看这个球体的内部。下面的图片清楚的显示了天空盒。(注:图片在文件低部)
正如你所看到的,天空盒是由许多的三角形组成球体的形状。
当天空盒建立后,所要存储的是顶点,如果所有的顶点按由顶部到下部的形式存储,我们就能很容易的用三角形扇形和三角形条渲染。

如何构成云的材质

  云是由一些颜色混合而成。一个简单的方法是产生材质适应点用天空盒中的X,Y适应点的功能产生S,T适应点。把得到的云例子贴在天空上,X,Y由天空的宽度除以X,Y得到。(x and y should be divided by the width of the sky dome base.)

  注意:随着天空的大小的增加,将变成一个半球,材质可能会超出天空的边界。解决这个问题的方法是用幂曲线去提高材质在三角形中的ds,dt.(One solution to this problem could be using some form of exponential curve to increase the textures ds and dt in triangles close to the edge of the dome.)

太阳和月亮

  Paul Schlyter of Stockholm Sweden 在一个WEB网站中发布了如何根据一些信息计算天体物体的相应的位置。虽然他得出的方程式很简单,但他还是超出了许多游戏的范围。

  当前的游戏时间的计算是为框架渲染服务的。这些方程式能用于计算位置和所有物体的大小。特别是太阳,他的位置通常要计算白天和晚上的颜色信息。

  白天,晚上,日落和日出的颜色

  在这篇文章中的代码只能计算云,物体的颜色。但他支持白天,夜晚的颜色。太阳总是分成四个部分:白天,晚上,日落和日出。如果太阳是在白天,夜晚,白天和夜晚的颜色将可以直接用。如果太阳是日出和日落,就将加入太阳的距离。

天空盒的渲染

渲染天空盒有以下几个步骤:

* 在天空盒中云和物体的位置
* 太阳的位置,所有物体,云的颜色,框架缓冲器
* 框架缓冲器在计算天空颜色后清除
* Z缓冲写为不可用
* 渲染在云层后的星
* 渲染所有的物体
* 渲染所有的云
云层绑钉到框架缓冲器上。

  在天空盒中的其他部分,如太阳,不用绑钉,但需要alpha部分,以便于材质不覆盖到其他的部分。(but required an alpha component so the texture does not overdraw elements of the dome that are not part of the actual sun. )

  月亮渲染有2部分。第一,对于月亮的材质,也要有alpha部分,在月亮下面的部分的alpha值为1.0,在月亮外部的alpha值为0.0。下面的部分不可以用天空的颜色渲染。这样做便于星在月亮后面出现。第二,实际的月亮的材质绑钉在天空上。这是因为在白天,月亮将显示天空的蓝和红色调。
代码也支持太阳周围的光芒。首先复制太阳形状的天空,然后用光芒的材质代替天空的材质,不是太阳的材质。光芒和天空绑钉。
返回顶部】 【打印本页】 【关闭窗口

关于我们 / 给我留言 / 版权举报 / 意见建议 / 网站编程QQ群   
Copyright ©2003- 2024 Lihuasoft.net webmaster(at)lihuasoft.net 加载时间 0.00279