游戏引擎笔记(三)天空盒和水面

博客介绍了游戏场景中天空和水面效果的实现方法。天空部分包括天空穹庐、云层、容积云及天空盒的实现;水面部分涵盖动画、颜色、纹理、反射折射、菲涅尔效果等,还介绍了水面设置和渲染,包括顶点结构、纹理加载等内容。

天空穹庐:

天空穹庐是一个半球形物体,结合天空纹理的贴图来实现的。

 

天空云层:

天空云层的实现是在场景中放置一个到多个平面,然后在上面贴上天空纹理。

(使用BillBoard)

 

容积云:

如果应用程序需要更真实的样子,则可以实现容积云模型,使玩家能够进入风景中,沉浸在容积云中。

 

天空盒的实现:

大部分场景处于天空和内部,因此在确定天空盒顶点的时候,天空盒的顶点顺序和普通六面体盒子的顶点顺序是相反的。

1.定义顶点

2.加载纹理

3.天空盒变换(缩放、平移)

4.绘制天空盒

 

顶点结构:

Struct VERT_SKYBOX

{

Float x, y, z;

Float tu, tv;

}

 

水面动画:

用波形表示水面。

 

水面颜色:

假设水的颜色置于水面高度和观察者角度有关,那么可以这样计算颜色。

Half facing = saturate(dot(eyeVect.normal));

Half3 waterColor = lerp(shallowWaterColor.deepWaterColor, facing);

 

水面纹理:

波纹和凹凸纹理。

 

反射和折射:

反射和折射的思想都一样,以水面为裁剪平面,分别把场景渲染为折射和反射贴图,然后投影到水面上。

 

菲涅尔效果:

对水面来说,当观察者和水面的角度越小时,反射效果越明显,反之,折射效果越明显。

 

水面设置:

1.顶点结构

Struct WaterUpVertex{

Float x,y,z;

Float tu,tv;

//Float3 normal;

 

};

 

Struct WaterDownVertex{

Float x, y, z;

float3 normal;

}

 

2.纹理加载

通常情况下,这些纹理图片是一系列包含微小变化的图片,可以用一个配置文件来表示纹理数组的顺序。

  1. 使用多张纹理
  2. 改变纹理坐标

 

水面渲染:

水面的渲染同样分为两个部分,水面的正面与背面,正面需要添加纹理,而背面只需要添加水面颜色。

 

 

场景管理模块:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值