|
|
我始终算出来是错的,我草他吗!!!
下面是我的方法,请看看是不是有错
//计算出观察矩阵和透视矩阵
D3DXMATRIXA16 m_view;
D3DXMATRIXA16 m_proj;
D3DXMatrixLookAtLH( &m_view, &m_eye, &m_lookat, &m_up );
D3DXMatrixPerspectiveFovLH( &m_proj, m_pi, m_aspect, m_near, m_far );
//初始化m_stand_frustum_point,他是经过视图变换和投影变换后的范体
D3DXVECTOR3 m_stand_frustum_point[8];
m_stand_frustum_point[0] = D3DXVECTOR3(1, 1, 0);
m_stand_frustum_point[1] = D3DXVECTOR3(1, -1, 0);
m_stand_frustum_point[2] = D3DXVECTOR3(-1, 1, 0);
m_stand_frustum_point[3] = D3DXVECTOR3(-1, -1, 0);
m_stand_frustum_point[4] = D3DXVECTOR3(1, 1, 1);
m_stand_frustum_point[5] = D3DXVECTOR3(1, -1, 1);
m_stand_frustum_point[6] = D3DXVECTOR3(-1, 1, 1);
m_stand_frustum_point[7] = D3DXVECTOR3(-1, -1, 1);
D3DXMATRIX iver_view;
D3DXMATRIX iver_proj;
D3DXMATRIX mul_temp;
//计算出观察矩阵和透视矩阵的逆矩阵
D3DXMatrixInverse(&iver_proj, 0, &m_proj);
D3DXMatrixInverse(&iver_view, 0, &m_view);
//把他们相乘得到最终的反算矩阵
D3DXMatrixMultiply(&mul_temp, &iver_proj, &iver_view);
//把最终的范体的每个点乘上反算矩阵,应该得到他们在被进行视图变换和投影变换之前的位置
D3DXVECTOR4 temp;
D3DXVECTOR3 m_frustum_point[8];
for(int i=0; i<8; ++i)
{
D3DXVec3Transform( &temp, &m_stand_frustum_point, &mul_temp );
m_frustum_point.x = temp.x;
m_frustum_point.y = temp.y;
m_frustum_point.z = temp.z;
}
//但是结果根本和我想的不一样,好象X坐标有很大错误,请问为什么?我什么地方错了? |
|