zu tun, was Sie in Ihrem Kommentar machen wollen, müssen Sie auch die bisherige Ausrichtung von youe Spieler kennen. Eigentlich ist es das Beste, alle Daten über Position und Ausrichtung Ihres Spielers (und fast alles andere in einem Spiel) in einer 4x4-Matrix zu speichern. Dies geschieht durch "Hinzufügen" einer vierten Spalte und einer vierten Zeile zu der 3 × 3 Rotationsmatrix und Verwenden der zusätzlichen Spalte zum Speichern der Information über die Spielerposition. Die Mathematik dahinter (homogene Koordinaten) ist ziemlich einfach und sehr wichtig in OpenGL und DirectX. Ich schlage vor, diese großen Tutorial http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices/ Jetzt Ihren Player auf Ihrem Gegner zu drehen, mit GLM, können Sie dies tun:
1) In Ihrem Player und feindlichen Klassen, eine Matrix und 3D-Vektor für die Position erklären
glm::mat4 matrix;
glm::vec3 position;
2) drehen in Richtung Feind mit
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) den Gegner gegenüber dem Spieler zu drehen, tun
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
Wenn Sie alles in der Matrix gespeichert werden sollen, nicht ausdrücklich erklären, die Position als Variable, sondern als Funktion
vec3 position(){
return vec3(matrix[3][0],matrix[3][1],matrix[3][2])
}
und dreht mit
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
Für eine Rotationsmatrix benötigen Sie einen Richtungsvektor (z. B. eine Achse) ** und ** einen Winkel. Angesichts nur einer Richtung, über welche Rotation sprechen Sie? – 6502
Ich möchte dies tun: Vec3 dirToEnemy = (Feind.Position - Player.Position) .normalize(); Spieler.Matrix.makeRotationDir (dir); Spieler.Attack(); – UfnCod3r
@ 6502: Nein, für Rotationsmatrix können Sie auch drei Vektoren verwenden (x, y, z) – SigTerm