参考教程
学习记录
这篇文章中我们介绍天空的绘制,使用 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) |
最终效果: