天空盒、水面和纹理动画.ppt

天空盒、水面和纹理动画.ppt

ID:56469744

大小:701.00 KB

页数:29页

时间:2020-06-19

天空盒、水面和纹理动画.ppt_第1页
天空盒、水面和纹理动画.ppt_第2页
天空盒、水面和纹理动画.ppt_第3页
天空盒、水面和纹理动画.ppt_第4页
天空盒、水面和纹理动画.ppt_第5页
资源描述:

《天空盒、水面和纹理动画.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、天空盒李巍天空的种类目前描述“天空”的技术主要包括三种类型:平板型天空(SkyPlane),仅用一个平板放到头顶。天空穹(SkyDome),放到头顶的是一个曲面。天空盒(SkyBox),放到场景的是一个立方体。天空的种类天空盒经常是由六个面组成的立方体,并经常会随着视点的移动而移动。天空盒将刻画极远处人无法达到的位置的景物。天空盒的实现与D3D实现的普通立方体不同的一点是,大部分情况下我们视点都包容在天空盒内部,因此,天空盒的顶点顺序应当是正好与普通立方体的顶点顺序相反。天空盒的实现最简单的天空盒

2、,只需要填写好六个面的24个顶点,最后为每个面贴上纹理即可。CODE请注意渲染的时候的一些细节:纹理状态的重设、渲染状态的重设。天空盒的一些杂论天空盒对于程序员并不是困难的事情,但是真正要在程序中使得天空“好看”,那么,还需要美工的共同参与。天空穹相对而言表现力更好一些。魔兽世界就是采用了这种方法。天空盒的一些杂论对于并不太注意远景的场景,用天空板也不失为一种办法。在这种情况下,纯色的雾将覆盖整个远景,使得远处充满神秘。天空盒的一些杂论在高级一些的应用中,天空盒的纹理可能同时会用来生成CubeMa

3、p,并用之来做水面倒影、云影、反光等很眩的特效。天空盒的一些杂论云影重新思考纹理在目前的情况下,我们使用的都是D3D自己的IDirect3DTexture9纹理接口。但是,目前的使用中,我们发现这些接口需要在各个使用纹理的类中去处理其释放,如果以后这些类中有更多的纹理,我们就会很郁闷。CTEXTURE:设计我们计划将D3D的Texture封装到一个名为CTexture的类中。毫无疑问,CTexture首先应具备一个类型为LPDIRECT3DTEXTURE9的成员。那么,针对这个成员,我们就应该起码

4、有创建、销毁这两个函数。而在析构函数中,我们只需要调用一次销毁,就可以使得使用Texture的类少一些精力为它们做扫尾的工作。CTEXTURE:编码 以及对原有程序的改造CODE既然是使用了自己的CTexture,那么就必须同样为Device添加设置纹理的功能,这一点应该明确。 这种加入一个类就需要改变另一个类的情况,叫做“相关”。总结目前用来实现天空的技术有三种:天空板,天空穹和天空盒,天空盒最常用。天空盒总是从内部看,所以其顶点方向正好和普通立方体的顶点方向相反。出于对纹理使用方便的考虑,我们

5、封装一个纹理类。在之后的实践中,我们还将继续扩展此纹理类,以使它实现更多的功能。作业在上星期五代码的基础上。请添加“摄像机”功能,最好以类实现。(可参考上次给大家的代码)请自己编码实现一个纹理类。附加题:请使用您自己的纹理类来做一个天空盒。本次作业请在本周五0:00之前交。上次《摄像机与公告板》的作业请在本周四0:00之前交。水面和纹理动画比起《RealTimeRendering》,本书更加深刻一些,也更加专注于BSP室内场景引擎的构建。水面的实现方法最早人们考虑水面,往往将其考虑为一堆三角形组成

6、的网格,网格的规则抖动便构成了波纹。但是,这种方法可以让场景比蜗牛还慢,因此只用作研究。水面的实现方法早期水面的实现方法基本上都是纹理动画,这种方法直到今天为止还在使用。纹理动画最简单最基础,对美工的要求比较高,对程序要求相当低。水面的实现方法BumpEnv技术出现后,水面的实现方法便开始多样起来,这些水面为场景的真实性做出了不朽的贡献。水面的实现方法Shader改变了水面实现的方式,它使得人们创建动感的水成为了可能。用Shader实现的水面可以完美地显示出波动和其他特殊的效果。纹理动画原理类如电

7、影胶片,纹理动画将循环播放一组纹理,并用这组纹理来描述动画。纹理动画的用途相当广泛,水面只是这些应用中比较出彩的一种。纹理的例子纹理动画实现平均每s毫秒顺序播放一个纹理,播放完毕后重头开始播放,以此便可实现纹理动画。VoidUpdate(floatfElapsed){m_fElapsed+=fElapsed;//更新时间if(m_fElapsed>=s)//如果到了需要切换纹理的时间{++Texture_Index;//切换纹理标号if(Texture_Index>=MAX_TEX_INDEX)/

8、/如果已经播放完毕{Texture_Index=0;}//重头开始播放m_fElapsed=0.0f;//重新计时}}纹理动画的实现VoidRender() { //根据当前的纹理标号进行渲染SetTexture(m_Textures[Texture_Index]); DrawPrimitive(); }水面的实现纹理动画所实现的水面一般由大量平板组成。演示水面的VB和IB纹理动画实现的水面很少有需要动态变化的,因此创建静态的VB和IB以提高渲染速度成为了一个优化的手段。实现纹理动

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。