天空盒的制作

转自:http://blog.csdn.net/xoyojank/article/details/1628932

概述
三维场影里的天空并不是“真正”的天空,而是用图片拼起来的,欺骗我们眼睛。通常把大家所在的场景用一个几何体包裹起来,再在里面贴上从各个角度的风景图,就好像一个真正的环境一样。想想CS之类的天空,是不是有点印象?
原理
现在的游戏里可能半球用的较多吧?不过原理上一样,我们这里以立方体为例。最简单的方法,莫过于画6个正方形,分别为它们贴上纹理。(要是真这样,我就不用写了-_-)这里我们只用一个正方形,也只用一个纹理,HOHO~想知道怎么回事?住下看吧(欠扁)
立方体环境贴图(Cubic Environment Mapping),也叫立方体贴图,就是一个纹理包含了包围物体场景的图像数据, 就像一个物体在立方体中心一样.每个面包含横竖各90度的视野,每个立方体贴图共6个面. 面的方向如下面左图所示:

右图呢,就是立方体贴图的UV坐标纹理的等价形式,说到底,就是把6张图片拼到一块儿去了而已。不过一般情况下,立方体贴图是映射到一个曲面上,而且,它跟本不使用UV坐标。代替它的是一个3D向量,在DirectX中是D3DFVF_TEXCOORDSIZE3类型。这样就很易的根据表面法向量将周围环境映射到物体表面,实现反射效果(激动人心呢)。
制作立方体贴图
看起来立方体贴图挺麻烦的,其实DirectX自己的纹理格式.dds就支持Cubemap Texture。创建也不需要什么复杂的工具,用SDK带的DxTex.exe就可。
1. 新建一个立方体贴图

2. 选择一个表面

3. 为当面表面添加纹理

在这之前可要把各个方向的贴图准备好哦

4. 重复2、3,直到6个面全部完成
5. 保存
绘制天空盒子
既然有了立方体贴图,那么是不是画个立方体把图贴上就行了?道理是不错,只不过还有更简单的办法:在面前画个矩形,你往哪看,就画哪个角度的天空!(太贱了,这样的鬼点子是谁想的?)
还记得D3DFVF_XYZRHW不?当顶点结构体中有RHW时,表示这个顶点已经在屏幕坐标系上,不用再进行什么世界变换、视图变换、投影变换,也不用进行光线计算了。不过这时的原点就在客户区的左上角了,其中x向右为正,y向下为正,而z的意义已经变为z-buffer的象素深度。那么我们就在z=1.0f处画这个矩形就行了,没有比1.0f更远的了!
有矩形了,那么怎么把环境贴图映射到上面呢?用HLSL一句搞定!(GPU编程不是盖的)。
不过别记了把纹理坐标向量先算出来:

Output.Tex = normalize( mul(Input.Pos, g_mInvWorldViewProjection) );

至于映射嘛,用texCUBE 就行了

语法

ret texCUBE(s, t)

NameIn/OutTemplate TypeComponent Type Size
sinobject samplerCUBE1
t in vectorfloat3
retoutvectorfloat 4

注意:texCUBE需要显卡支持PixelShader1.1,如果用到偏导数则需要PixelShader2.0
查了一下我的显卡(Intel集成的GMA900),刚好支持PS2.0,我心里那个激动呀……激动的我都不知道该怎么表达我的感情了
看看我做的效果吧:

References
The DirectX Software Development Kit

转载于:https://www.cnblogs.com/cg_ghost/archive/2012/01/06/2314011.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity是一款广泛应用于游戏开发的跨平台游戏引擎,它为开发者提供了丰富的工具和资源,帮助他们创建高质量的游戏作品。其中一个非常重要的组件就是天空,它用来渲染游戏中的天空和背景。 Unity的天空(Skybox)是一个360度全景片,它被用来模拟游戏场景中的天空天空可以是一个片或者一组片,通过将这些片投射到一个立方体或球体表面上,使得玩家在游戏中观察到的天空整体效果更加真实。 在使用Unity中的天空时,开发者可以选择使用预设的天空或自定义的天空。预设的天空包含了一些常见的天气和场景效果,比如晴朗、阴云、夜晚、雨天等。而自定义的天空则提供了更多的创作自由,开发者可以根据游戏的需求,使用自己制作片或材质来创建独特的天空效果。 为了让天空能够更好地适应游戏场景,Unity还提供了一些调整选项。开发者可以调整天空的亮度、颜色、旋转、纹理过滤等参数,以达到想要的效果。此外,Unity还支持动态天空,即可以根据时间、季节或其他事件的改变而实时调整天空的显示效果。 总的来说,Unity的天空是一项非常重要的功能,它能够为游戏提供逼真的天空背景,为玩家带来更加沉浸式的游戏体验。开发者可以根据自己的需求选择预设的天空或自定义的天空,并通过调整参数来创造出独特的天空效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值