一. 天空盒的应用:
天空盒用于表现游戏中的天空或者环境。
二. 天空盒基本原理:
天空盒就是一个包含场景所有元素的长方体盒子,该盒子的六个面附有环境贴图,所有游戏行为均是在盒子中进行,在盒子内看来,附有贴图的盒子既是整体天空环境。
三. 天空盒实现方式及相关代码:
由天空盒的基本原理可以将其实现归纳为以下步骤:
1. 初始化天空盒长方体并将其放置到场景中
2. 设置纹理分别渲染长方体各个面(如要绘制动态云则需每帧改变纹理UV)
具体相关代码如下:
1. 初始化天空盒长方体定点信息
a. 定义定点格式
struct SkyboxVertices
{
enum
{
FVF= D3DFVF_XYZ D3DFVF_DIFFUSE D3DFVF_TEX1,
};
VECTOR3vPos;
DWORDnColor;
floatfu;
floatfv;
};
b. 初始化顶点数据(由于代码相似,只用一个面代码做例子)
m_Verts[TOP][0].vPos = D3DXVECTOR3( - m_fSize/2 ,+ m_fSize/2 ,-m_fSize/2);m_Verts[TOP][0].fu = 0.0f;m_Verts[TOP][0].fv = 0.0f;m_Verts[TOP][0].nColor = 0xffA283b0;
m_Verts[TOP][1].vPos = D3DXVECTOR3( + m_fSize/2 ,+ m_fSize/2 ,-m_fSize/2);m_Verts[TOP][1].fu = 1.0f;m_Verts[TOP][1].fv = 0.0f;m_Verts[TOP][1].nColor = 0xffA283b0;
m_Verts[TOP][2].vPos = D3DXVECTOR3( - m_fSize/2 ,+ m_fSize/2 ,+m_fSize/2);m_Verts[TOP][2].fu = 0.0f;m_Verts[TOP][2].fv = 1.0f;m_Verts[TOP][2].nColor = 0xffA283b0;
m_Verts[TOP][3].vPos = D3DXVECTOR3( + m_fSize/2 ,+ m_fSize/2 ,+m_fSize/2);m_Verts[TOP][3].fu = 1.0f;m_Verts[TOP][3].fv = 1.0f;m_Verts[TOP][3].nColor = 0xffA283b0;
2. 设置纹理贴图绘制天空盒
pDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR );
pDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR );
pDevice->SetTexture( 1 , NULL );
// 渲染
if ( m_Texture[TOP] )
{
pDevice->SetTexture( 0 , m_Texture[TOP] );
}
pDevice->DrawPrimitiveUP( D3DPT_TRIANGLESTRIP , 2 , m_Verts[TOP] , sizeof(SkyboxVertices) );
四. 效果展示:
天空盒 UV动画实现的天空盒
五. 其他:
关于动态云的实现方式可用UV动画实现。
锐亚教育,游戏开发论坛|游戏制作人|游戏策划|游戏开发|独立游戏|游戏产业|游戏研发|游戏运营| unity|unity3d|unity3d官网|unity3d 教程|金融帝国3|8k8k8k|mcafee8.5i|游戏蛮牛|蛮牛 unity|蛮牛
- 还没有人评论,欢迎说说您的想法!