|
|
先说明我用的是DX,通常的做法是获得matView ,matProj,然后
D3DXMatrixMultiply(&clip,&m_matView,&m_matProj);
//D3DXMatrixInverse(&clip,NULL,&clip);
m_FrustumInfo[FRUSTUM_NEAR].a = clip._13;
m_FrustumInfo[FRUSTUM_NEAR].b = clip._23 ;
m_FrustumInfo[FRUSTUM_NEAR].c = clip._33 ;
m_FrustumInfo[FRUSTUM_NEAR].d = clip._43 ;
D3DXPlaneNormalize(&m_FrustumInfo[FRUSTUM_NEAR],&m_FrustumInfo[FRUSTUM_NEAR]);
m_FrustumInfo[FRUSTUM_FAR].a = clip._14 - clip._13;
m_FrustumInfo[FRUSTUM_FAR].b = clip._24 - clip._23;
m_FrustumInfo[FRUSTUM_FAR].c = clip._34 - clip._33;
m_FrustumInfo[FRUSTUM_FAR].d = clip._44 - clip._43;
D3DXPlaneNormalize(&m_FrustumInfo[FRUSTUM_FAR],&m_FrustumInfo[FRUSTUM_FAR]);
m_FrustumInfo[FRUSTUM_LEFT].a = clip._14 + clip._11;
m_FrustumInfo[FRUSTUM_LEFT].b = clip._24 + clip._12;
m_FrustumInfo[FRUSTUM_LEFT].c = clip._34 + clip._13;
m_FrustumInfo[FRUSTUM_LEFT].d = clip._44 + clip._14;
D3DXPlaneNormalize(&m_FrustumInfo[FRUSTUM_LEFT],&m_FrustumInfo[FRUSTUM_LEFT]);
m_FrustumInfo[FRUSTUM_RIGHT].a = clip._14 - clip._11;
m_FrustumInfo[FRUSTUM_RIGHT].b = clip._24 - clip._12;
m_FrustumInfo[FRUSTUM_RIGHT].c = clip._34 - clip._13;
m_FrustumInfo[FRUSTUM_RIGHT].d = clip._44 - clip._14;
D3DXPlaneNormalize(&m_FrustumInfo[FRUSTUM_RIGHT],&m_FrustumInfo[FRUSTUM_RIGHT]);
m_FrustumInfo[FRUSTUM_TOP].a = clip._14 - clip._12;
m_FrustumInfo[FRUSTUM_TOP].b = clip._24 - clip._22;
m_FrustumInfo[FRUSTUM_TOP].c = clip._34 - clip._32;
m_FrustumInfo[FRUSTUM_TOP].d = clip._44 - clip._42;
D3DXPlaneNormalize(&m_FrustumInfo[FRUSTUM_TOP],&m_FrustumInfo[FRUSTUM_TOP]);
m_FrustumInfo[FRUSTUM_BOTTOM].a = clip._14 + clip._12;
m_FrustumInfo[FRUSTUM_BOTTOM].b = clip._24 + clip._22;
m_FrustumInfo[FRUSTUM_BOTTOM].c = clip._34 + clip._32;
m_FrustumInfo[FRUSTUM_BOTTOM].d = clip._44 + clip._42;
D3DXPlaneNormalize(&m_FrustumInfo[FRUSTUM_BOTTOM],&m_FrustumInfo[FRUSTUM_BOTTOM]);
但是我目前根据这个算出来的结果总感觉不对,一个处于原点的摄像机,SetPerspective(D3DX_PI/4, (float)640/(float)480, 1.0f, 1000.0f);向上为正方向,得到的FRUSTUM很奇怪
- [0] {a=0.00000000 b=0.00000000 c=0.99999988 ...}
a 0.00000000 float
b 0.00000000 float
c 0.99999988 float
d -1.0000000 float
- [1] {a=0.00000000 b=0.00000000 c=-1.0000000 ...} D3DXPLANE
a 0.00000000 float
b 0.00000000 float
c -1.0000000 float
d 1000.0601 float
- [2] {a=0.92387950 b=0.00000000 c=0.38268346 ...} D3DXPLANE
a 0.92387950 float
b 0.00000000 float
c 0.38268346 float
d 0.00000000 float
- [3] {a=-0.92387950 b=0.00000000 c=0.38268346 ...} D3DXPLANE
a -0.92387950 float
b 0.00000000 float
c 0.38268346 float
d 0.00000000 float
- [4] {a=0.00000000 b=-0.92387950 c=0.38268346 ...} D3DXPLANE
a 0.00000000 float
b -0.92387950 float
c 0.38268346 float
d 0.00000000 float
- [5] {a=0.00000000 b=0.92387950 c=0.38268346 ...} D3DXPLANE
a 0.00000000 float
b 0.92387950 float
c 0.38268346 float
d 0.00000000 float
为什么后面的4个面的d全为0呢?
|
|