Per fare ciò che si desidera fare nel commento, è inoltre necessario conoscere l'orientamento precedente di Youe Player. In realtà, la cosa migliore da fare è memorizzare tutti i dati relativi alla posizione e all'orientamento del tuo giocatore (e quasi qualsiasi altra cosa in un gioco) in una matrice 4x4. Questo viene fatto aggiungendo una quarta colonna e una quarta riga alla matrice di rotazione 3x3, e usa la colonna extra per memorizzare le informazioni sulla posizione del giocatore. La matematica dietro a questo (coordinate omogenee) è abbastanza semplice e molto importante sia in OpenGL che in DirectX. Vi suggerisco questa grande esercitazione http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices/ Ora, per ruotare il lettore verso il tuo nemico, utilizzando GLM, si può fare questo:
1) Nelle vostre classi dei giocatori e nemici, dichiarare una matrice e 3D vettoriale per la posizione
glm::mat4 matrix;
glm::vec3 position;
2) ruotano verso nemico con
player.matrix = glm::LookAt(
player.position, // position of the player
enemy.position, // position of the enemy
vec3(0.0f,1.0f,0.0f)); // the up direction
3) per ruotare il nemico verso il giocatore, fanno
enemy.matrix = glm::LookAt(
enemy.position, // position of the player
player.position, // position of the enemy
vec3(0.0f,1.0f,0.0f)); // the up direction
Se si desidera memorizzare tutto nella matrice, non dichiarano la posizione come una variabile, ma come una funzione
vec3 position(){
return vec3(matrix[3][0],matrix[3][1],matrix[3][2])
}
e ruotare con
player.matrix = glm::LookAt(
player.position(), // position of the player
enemy.position(), // position of the enemy
vec3(0.0f,1.0f,0.0f)); // the up direction
Per una matrice di rotazione è necessario un vettore di direzione (ad esempio un asse) ** e ** un angolo. Dato solo una direzione di quale rotazione stai parlando? – 6502
voglio fare questo: Vec3 dirToEnemy = (Enemy.Position - Player.Position) .normalize(); Player.Matrix.makeRotationDir (dir); Player.Attack(); – UfnCod3r
@ 6502: no, per la matrice di rotazione è anche possibile utilizzare tre vettori (x, y, z) – SigTerm