在实现地形阴影生成功能的时候,了解到一般的做法都是通过射线追踪算法来生成.
但是此种方法有两个弊端,一是生成速度慢,而是对于那些有alpha测试的面不好处理.
       后来就想到利用渲染到缓冲区来实现此功能:

       第一步,先完成垂直向下方向光的阴影生成.这种情况下的阴影生成非常简单,
 建立一个正交投影矩阵,直接渲染,就可以了.

      第二步,就比较麻烦了,首先也是建立一个正交矩阵,但是接着要将正交矩阵以灯光方向
倾斜,    如下图所示:然后渲染,

BOOL CCamera::BuildParallelepipedOrthoMatrix(const CVector3D& vDir)
{
      AppCheckSlow(AppAbs(vDir.Y)>=CORE_EPSILON);
      SetOrthoMatrix(m_fWidth,m_fNearZ,m_fFarZ);
     m_MatProject.M[2][0]=  m_MatProject.M[0][0]*(vDir.X/(vDir.Y));
     m_MatProject.M[2][1]=  m_MatProject.M[1][1]*(vDir.Z/(vDir.Y));
      return TRUE;
}

       

      第三步,就需要考虑地形的起伏了,也就是说,需要考虑地形高度导致在阴影图中的位置.


       
       
       
       下面是最终效果,感觉应该和wow的差别不大了.呵呵.