Ce code provient de l'introduction à DX11 par Frank D Luna. Je comprends un peu la théorie de ceci. D'abord obtenir des coordonnées tronconiques dans l'espace de vue. Obtenez la matrice du monde et la matrice de vue du modèle. Obtenez la matrice inverse pour trouver les coordonnées de Frustum dans le local du modèle. Ma question est la suivante: pourquoi ai-je seulement besoin d'une matrice de composantes d'échelle X? Et si l'objet était étiré par les axes Y, Z?A propos de la mise en œuvre de l'abattage frustum
for(UINT i = 0; i < mInstancedData.size(); ++i)
{
XMMATRIX W = XMLoadFloat4x4(&mInstancedData[i].World);
XMMATRIX invWorld = XMMatrixInverse(&XMMatrixDeterminant(W), W);
// View space to the object's local space.
XMMATRIX toLocal = XMMatrixMultiply(invView, invWorld);
// Decompose the matrix into its individual parts.
XMVECTOR scale;
XMVECTOR rotQuat;
XMVECTOR translation;
XMMatrixDecompose(&scale, &rotQuat, &translation, toLocal);
// Transform the camera frustum from view space to the object's local space.
XNA::Frustum localspaceFrustum;
//TransformFrustum(&localspaceFrustum, &mCamFrustum, XMVectorGetX(scale), rotQuat, translation);
XNA::TransformFrustum(&localspaceFrustum, &mCamFrustum, XMVectorGetX(scale), rotQuat, translation);
// Perform the box/frustum intersection test in local space.
if(XNA::IntersectAxisAlignedBoxFrustum(&mSkullBox, &localspaceFrustum) != 0)
{
// Write the instance data to dynamic VB of the visible objects.
dataView[mVisibleObjectCount++] = mInstancedData[i];
}
}
md3dImmediateContext->Unmap(mInstancedBuffer, 0);
}
J'ai étudié ce livre il y a 3 ans au collège, à partir de mon cours de graphisme informatique mon tuteur nous a appris que vous ne prenez que la position X car il suppose implicitement que l'échelle d'un objet est (1, 1, 1) garder le maillage proportionné correctement, évidemment ce n'est pas toujours vrai et je recommande de ne pas ignorer totalement les autres avions. – Alex