|
|
发表于 2008-8-5 13:51:00
|
显示全部楼层
Re:请教视角矩阵和投影矩阵相乘是什么意思
空间中的点 * 视角矩阵 * 投影矩阵之后就将3d坐标转换到屏幕2d坐标.
转换出来的坐标实际上是在 (-1,-1)-(1,1)的范围,(0,0)点才是屏幕中心
那个矩阵里面的各个量是什么意思就要从构成矩阵的算法来看了.
D3DXMatrixLookAtLH 这个函数的算法如下:
D3DXMATRIX* D3DXMatrixLookAtLH( D3DXMATRIX* pout, D3DXVECTOR3* pEye, D3DXVECTOR3* pAt, D3DXVECTOR3* pUp )
{
D3DXVECTOR3 vZ = *pAt - *pEye;
D3DXVec3Normalize( &vZ, &vZ );
D3DXVECTOR3 vX, vY;
D3DXVec3Cross( &vX, pUp, &vZ );
D3DXVec3Normalize( &vX, &vX );
D3DXVec3Cross( &vY, &vZ, &vX );
pout->_11 = vX.x; pout->_12 = vY.x; pout->_13 = vZ.x; pout->_14 = 0;
pout->_21 = vX.y; pout->_22 = vY.y; pout->_23 = vZ.y; pout->_24 = 0;
pout->_31 = vX.z; pout->_32 = vY.z; pout->_33 = vZ.z; pout->_34 = 0;
pout->_41 = vEye->x; pout->_42 = vEye->y; pout->_43 = vEye->z; pout->_44 = 1;
return pout;
}
还有 D3DXMatrixPerspectiveFovLH 的算法:
D3DXMATRIX * D3DXMatrixPerspectiveFovLH( D3DXMATRIX *pout, FLOAT fovy, FLOAT Aspect, FLOAT zn, FLOAT zf )
{
float h = 1.f / tanf( fovy * 0.5f );
float w = h / aspect;
float t = zf / (zf - zn);
pout->_11 = w; pout->_12 = 0; pout->_13 = 0; pout->_14 = 0;
pout->_21 = 0; pout->_22 = h; pout->_23 = 0; pout->_24 = 0;
pout->_31 = 0; pout->_32 = 0; pout->_33 = t; pout->_34 = 1;
pout->_41 = 0; pout->_42 = 0; pout->_43 = -zn * t; pout->_44 = 0;
return pout;
}
View矩阵其实就把原来场景中的坐标平移并旋转到以眼睛的坐标开始的空间中,
Projection矩阵就是把坐标投影到2d空间中 |
|