|
发表于 2010-3-6 13:55:00
|
显示全部楼层
Re:在CubeMap中怎样获得6个观察矩阵?
这是我clight类里的代码,仅供参考
void GetLightViewMatrix(D3DXMATRIXA16* pmatLightView ,
D3DCUBEMAP_FACES iFace = D3DCUBEMAP_FACE_POSITIVE_X)
{
if (m_eType == SGELIGHT_SPOT)
{
D3DXVECTOR3 vLookAt = m_vPosition + m_vDirection;
D3DXVECTOR3 vLookUp;
if (m_vDirection.x == 0 && m_vDirection.z == 0)
vLookUp = D3DXVECTOR3(1.0f , 0.0f , 0.0f);
else
vLookUp = D3DXVECTOR3(0.0f , 1.0f , 0.0f);
D3DXMatrixLookAtLH(pmatLightView , &m_vPosition , &vLookAt , &vLookUp);
}
if (m_eType == SGELIGHT_POINT)
{
D3DXVECTOR3 vLookDir;
D3DXVECTOR3 vLookUp;
switch(iFace)
{
case D3DCUBEMAP_FACE_POSITIVE_X:
vLookDir = D3DXVECTOR3(1.0f, 0.0f, 0.0f);
vLookUp = D3DXVECTOR3(0.0f, 1.0f, 0.0f);
break;
case D3DCUBEMAP_FACE_NEGATIVE_X:
vLookDir = D3DXVECTOR3(-1.0f, 0.0f, 0.0f);
vLookUp = D3DXVECTOR3( 0.0f, 1.0f, 0.0f);
break;
case D3DCUBEMAP_FACE_POSITIVE_Y:
vLookDir = D3DXVECTOR3(0.0f, 1.0f, 0.0f);
vLookUp = D3DXVECTOR3(0.0f, 0.0f,-1.0f);
break;
case D3DCUBEMAP_FACE_NEGATIVE_Y:
vLookDir = D3DXVECTOR3(0.0f,-1.0f, 0.0f);
vLookUp = D3DXVECTOR3(0.0f, 0.0f, 1.0f);
break;
case D3DCUBEMAP_FACE_POSITIVE_Z:
vLookDir = D3DXVECTOR3( 0.0f, 0.0f, 1.0f);
vLookUp = D3DXVECTOR3( 0.0f, 1.0f, 0.0f);
break;
case D3DCUBEMAP_FACE_NEGATIVE_Z:
vLookDir = D3DXVECTOR3(0.0f, 0.0f,-1.0f);
vLookUp = D3DXVECTOR3(0.0f, 1.0f, 0.0f);
break;
}
D3DXVECTOR3 vLookAt = m_vPosition + vLookDir;
D3DXMatrixLookAtLH(pmatLightView , &m_vPosition , &vLookAt , &vLookUp);
}
}
|
|