Dieser Code ist von Einführung in DX11 von Frank D Luna. Ich verstehe die Theorie davon. Zuerst die Frustum-Koordinaten im Ansichtsbereich abrufen. Holen Sie sich die Weltmatrix und die Ansichtsmatrix des Modells. Holen Sie sich die inverse Matrix, um die Koordinaten des Kegelstumpfs im lokalen Modell zu ermitteln.Informationen über die Implementierung von Frustum Culling
Meine Frage ist, warum brauche ich nur X-Komponente der Maßstabsmatrix? Was ist, wenn das Objekt durch Y, Z-Achsen gestreckt wurde?
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);
}
Ich studierte dieses Buch vor 3 Jahren am College, von meinem Computergrafikkurs mein Tutor lehrte uns, dass Sie nur die X-Position nehmen, da implizit angenommen wird, dass der Maßstab eines Objekts (1, 1, 1) ist Halten Sie das Netz richtig proportioniert, das stimmt natürlich nicht immer, und ich würde empfehlen, die anderen Ebenen nicht völlig zu ignorieren. – Alex