参考教程
学习记录
这篇文章中我们介绍天空的绘制,使用 SkyDome 实现。原理就是绘制球体,我们的场景都在球体里面,从场景的位置看向上方就可以看到球的内部面,所以需要我们关闭或者反转背面剔除,然后渲染球体。本篇代码基于上一篇,新增 SkydomeClass 和 SkydomeShaderClass 类。
SkyDomeClass 其实就是球体模型的类,类似于 TerrainClass ,它负责顶点索引信息的封装,声明如下:
1 | //////////////////////////////////////////////////////////////////////////////// |
其实现也是很简单,使用 LoadSkyDomeModel 加载模型文件,然后 InitializeBuffers 创建缓冲等等。
SkyDomeShaderClass 是简单的渲染类,声明如下:
1 | //////////////////////////////////////////////////////////////////////////////// |
其所对应的 skydome.vs 和 skydome.ps 中,其数据的传递和变换类似其他的着色器,着色的时候我们以顶点的高度为分量来计算颜色,如下:
1 | //////////////////////////////////////////////////////////////////////////////// |
最后我们在 ZoneClass 里添加 SkyDome 的对象,在 ShaderManagerClass 里添加 SkyDomeShaderClass 对象,并在渲染地形之前进行渲染(注意我们渲染的时候会关闭背面剔除和 Z-Buffer),部分渲染代码如下:
1 | bool ZoneClass::Render(D3DClass* Direct3D, ShaderManagerClass* ShaderManager , TextureManagerClass* TextureManager) |
最终效果:
