La matrice de projection est une projection en perspective. Je veux voir quelle zone est visible de la caméra donnée. Pour visualiser que je veux étirer mon cube comme le tronc, afin que je puisse voir le résultat d'un autre appareil photo.obtiennent le visionnement frustum comme worldcoordinates
Mon Idear:
obtenir l'inverse de la viewProjectionMatrix et multiplier mon cubecoordinate avec elle:
glm::vec4 CubeCoordinates[8]{
glm::vec4(-1.0f, -1.0f, 1.0f, 1.0f),
glm::vec4(-1.0f, 1.0f, 1.0f, 1.0f),
glm::vec4(1.0f, 1.0f, 1.0f, 1.0f),
glm::vec4(1.0f, -1.0f, 1.0f, 1.0f),
glm::vec4(-1.0f, -1.0f, -1.0f, 1.0f),
glm::vec4(-1.0f, 1.0f, -1.0f, 1.0f),
glm::vec4(1.0f, 1.0f, -1.0f, 1.0f),
glm::vec4(1.0f, -1.0f, -1.0f, 1.0f) };
glm::mat4 InvertedViewProjectionMatrix = glm::inverse(refCamera.GetViewProjectionMatrix());
for (uint32_t i = 0; i < 8; ++i)
{
CameraEdgesWorldSpace[i] = InvertedViewProjectionMatrix * CubeCoordinates[i];
}
Maintenant, les cubecoordinates devraient être WorldSpace et ressembler à tronc de cône. Mais les coordonnées de sortie sont erronées.
Je peux vous garantir que viewProjectionMatrix fonctionne correctement, car je l'utilise comme partout.
Le calcul est-il erroné? ou est-ce que j'utilise la mauvaise commande pour inverser la matrice (je suis nouveau à GLM)?
Il vous manque la perspective en perspective. Après une projection (ou une projection inverse), la coordonnée w ne sera plus 1. – BDL
alors je dois seulement diviser par w? – Thomas
Oui. Si cela ne vous aide pas, veuillez ajouter un exemple montrant les valeurs dans votre matrice de caméra et les vecteurs résultants après la division. – BDL