Je pensais que je compris les mathématiques de matrice assez bien, mais apparemment je suis désemparésXNA: obtenir Vector3 de Matrix
Voici le setup:
J'ai un objet à [0,0,0] dans le monde espace. J'ai une classe d'appareil-photo commandée par des mouvements de souris pour tourner et faire un zoom autour de l'objet tel qu'il le regarde toujours. Voici comment je calcule mon viewMatrix de la caméra:
public Matrix viewMatrix {
get {
return
Matrix.CreateFromAxisAngle(Vector3.Up, rotAngle)
* Matrix.CreateFromAxisAngle(Vector3.Left, pitchAngle)
* Matrix.CreateTranslation(0, 0, distance)
;
}
}
Je dois être en mesure d'obtenir la position de la caméra dans l'espace du monde pour que je puisse obtenir sa distance de la boîte - en particulier la distance de chaque face de la boîte. Comment puis-je obtenir la position xyz de l'appareil photo dans les coordonnées spatiales mondiales?
J'ai essayé:
// all of these only return [0, 0, distance];
Vector3 pos = Vector3.Transform(Vector3.Zero, viewMatrix);
Vector3 pos = viewMatrix.Translation;
Vector3 pos = new Vector3(viewMatrix.M41, viewMatrix.M42, viewMatrix.M43);
Il semble que les informations de rotation se perd en quelque sorte. La chose étrange est que le code viewMatrix fonctionne parfaitement pour le positionnement de la caméra!