Lors des rotations, j'ai l'impression que ma boite contenant le frustum s'aggrandit de trop. Peut-être que ce n'est qu'une impression, mais je préfèrerais être sûr. Donc si vous pouviez voir en gros ma méthode et me dire si quelque chose cloche:
//Matrice inverse de la matrice de vue actuelle
D3DXMATRIX mInverseView;
D3DXMatrixInverse(&mInverseView, NULL, &pParent->mViewMatrix);
//Nouvelle position du centre de la boite en utilisant la position d'origine
D3DXVECTOR3 vNewFrustumPosition;
D3DXVec3TransformCoord(&vNewFrustumPosition, &pParent->vPosition, &mInverseView);
pParent->pFrustumBox->SetPosition(&vNewFrustumPosition);
//Calcul des nouveaux sommets du frustum en utilsant les sommets d'origne
D3DXVECTOR3 vPoint0, vPoint1, vPoint2, vPoint3, vPoint4, vPoint5, vPoint6, vPoint7;
D3DXVec3TransformCoord(&vPoint0, &pParent->vPointsOfFrustum[0], &mInverseView);
D3DXVec3TransformCoord(&vPoint1, &pParent->vPointsOfFrustum[1], &mInverseView);
D3DXVec3TransformCoord(&vPoint2, &pParent->vPointsOfFrustum[2], &mInverseView);
D3DXVec3TransformCoord(&vPoint3, &pParent->vPointsOfFrustum[3], &mInverseView);
D3DXVec3TransformCoord(&vPoint4, &pParent->vPointsOfFrustum[4], &mInverseView);
D3DXVec3TransformCoord(&vPoint5, &pParent->vPointsOfFrustum[5], &mInverseView);
D3DXVec3TransformCoord(&vPoint6, &pParent->vPointsOfFrustum[6], &mInverseView);
D3DXVec3TransformCoord(&vPoint7, &pParent->vPointsOfFrustum[7], &mInverseView);
//On cherche les points les plus éloignés par rapport
//au centre de la boite sur chaque axe
float temp;
float ex = fabsf(vPoint0.x - vNewFrustumPosition.x);
float ey = fabsf(vPoint0.y - vNewFrustumPosition.y);
float ez = fabsf(vPoint0.z - vNewFrustumPosition.z);
temp = fabsf(vPoint1.x - vNewFrustumPosition.x); if (temp > ex) ex = temp;
temp = fabsf(vPoint1.y - vNewFrustumPosition.y); if (temp > ey) ey = temp;
temp = fabsf(vPoint1.z - vNewFrustumPosition.z); if (temp > ez) ez = temp;
temp = fabsf(vPoint2.x - vNewFrustumPosition.x); if (temp > ex) ex = temp;
temp = fabsf(vPoint2.y - vNewFrustumPosition.y); if (temp > ey) ey = temp;
temp = fabsf(vPoint2.z - vNewFrustumPosition.z); if (temp > ez) ez = temp;
temp = fabsf(vPoint3.x - vNewFrustumPosition.x); if (temp > ex) ex = temp;
temp = fabsf(vPoint3.y - vNewFrustumPosition.y); if (temp > ey) ey = temp;
temp = fabsf(vPoint3.z - vNewFrustumPosition.z); if (temp > ez) ez = temp;
temp = fabsf(vPoint4.x - vNewFrustumPosition.x); if (temp > ex) ex = temp;
temp = fabsf(vPoint4.y - vNewFrustumPosition.y); if (temp > ey) ey = temp;
temp = fabsf(vPoint4.z - vNewFrustumPosition.z); if (temp > ez) ez = temp;
temp = fabsf(vPoint5.x - vNewFrustumPosition.x); if (temp > ex) ex = temp;
temp = fabsf(vPoint5.y - vNewFrustumPosition.y); if (temp > ey) ey = temp;
temp = fabsf(vPoint5.z - vNewFrustumPosition.z); if (temp > ez) ez = temp;
temp = fabsf(vPoint6.x - vNewFrustumPosition.x); if (temp > ex) ex = temp;
temp = fabsf(vPoint6.y - vNewFrustumPosition.y); if (temp > ey) ey = temp;
temp = fabsf(vPoint6.z - vNewFrustumPosition.z); if (temp > ez) ez = temp;
temp = fabsf(vPoint7.x - vNewFrustumPosition.x); if (temp > ex) ex = temp;
temp = fabsf(vPoint7.y - vNewFrustumPosition.y); if (temp > ey) ey = temp;
temp = fabsf(vPoint7.z - vNewFrustumPosition.z); if (temp > ez) ez = temp;
pParent->pFrustumBox->SetExtents(ex, ey, ez);
[jfdsdjhfuetppo]--Message édité par Alload--[/jfdsdjhfuetppo]