游戏引擎笔记(三)天空盒和水面
天空穹庐:
天空穹庐是一个半球形物体,结合天空纹理的贴图来实现的。
天空云层:
天空云层的实现是在场景中放置一个到多个平面,然后在上面贴上天空纹理。
(使用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.纹理加载
通常情况下,这些纹理图片是一系列包含微小变化的图片,可以用一个配置文件来表示纹理数组的顺序。
- 使用多张纹理
- 改变纹理坐标
水面渲染:
水面的渲染同样分为两个部分,水面的正面与背面,正面需要添加纹理,而背面只需要添加水面颜色。
场景管理模块:
本文作者:香菇0_0
本文链接:https://www.cnblogs.com/Xiang-gu/p/16512372.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步