|
D3DXMATRIX matBillBoard;
//根据当前观察方向构造广告板矩阵
D3DXVECTOR3 vDir = vLookatPt - vEyePt;
if( vDir.x > 0.0f )
D3DXMatrixRotationY( &matBillBoard, -atanf(vDir.z/vDir.x)+D3DX_PI/2 );
else
D3DXMatrixRotationY( &matBillBoard, -atanf(vDir.z/vDir.x)-D3DX_PI/2 );
//为树木矩阵乘以广告板矩阵
g_matTree = matBillBoard*g_matTree;
上面是根据观察方向产生公告牌的旋转矩阵的过程,不过上面旋转的部分我没有看懂,不知道那个旋转的角度是怎么产生的,为什么当vDir.x > 0.0f 的时候旋转角度是-atanf(vDir.z/vDir.x)+D3DX_PI/2,而当vDir.x > 0.0f 的时候旋转角度是-atanf(vDir.z/vDir.x)-D3DX_PI/2哪。
我的理解是atanf(vDir.z/vDir.x)肯定代表视线在水平面上和X轴的夹角(用Q表示),既然是公告板,也就是说公告板的方向肯定是和视线的方向正对着的,也就是180+Q才对啊,这样两个方向才正对着吗,但是事实证明我的是错的,为什么哪?
[em7] |
|