Terrain光照

调用lightTerrain进行明暗的计算

这里手动计算光照(没有涉及顶点法线)

问题1:

没有用到顶点法线每个面片的顶点明暗如何计算的?

利用行列索引计算每个面的阴暗因子,利用光源向量(与光反向)和平面法向量的点积计算两者余弦,

得到的值在【-1,1】之间,将【-1,0】之间的值定为0,(因为两者夹角90度就没有光照)

应用函数:

1.int Terrain::GetHeightMapEntry(int row, int col)         //读取高度函数
{
 return _heightmap[row * _numVertsPerRow + col];   // 高度图数据存在_heightmap里

}

2.

D3DXVECTOR3* D3DXVec3Cross(
  _Inout_       D3DXVECTOR3 *pOut,
  _In_    const D3DXVECTOR3 *pV1,
  _In_    const D3DXVECTOR3 *pV2
);
计算两者叉积
3.
FLOAT D3DXVec3Dot(
  _In_ const D3DXVECTOR3 *pV1,
  _In_ const D3DXVECTOR3 *pV2
);
计算余弦

猜你喜欢

转载自blog.csdn.net/qq_40947718/article/details/79322382