C++:世界上唯一能让程序员在配置环境上比写|

香菇0_0

园龄:2年7个月粉丝:10关注:1

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

天空穹庐:

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

 

天空云层:

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

(使用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. 改变纹理坐标

 

水面渲染:

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

 

 

场景管理模块:

 

 

本文作者:香菇0_0

本文链接:https://www.cnblogs.com/Xiang-gu/p/16512372.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   香菇0_0  阅读(88)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.