Aby zrobić to, co chcesz zrobić w swoim komentarzu, musisz znać poprzednią orientację gracza. Właściwie najlepszą rzeczą do zrobienia jest przechowywanie wszystkich danych dotyczących pozycji i orientacji odtwarzacza (i prawie wszystkiego w grze) w macierzy 4x4. Odbywa się to poprzez "dodanie" czwartej kolumny i czwartego rzędu do macierzy obrotu 3x3 i użycie dodatkowej kolumny do przechowywania informacji o pozycji gracza. Matematyka za tym (homogeniczne współrzędne) jest dość prosta i bardzo ważna zarówno w OpenGL, jak i DirectX. Proponuję wam tę wielką samouczek http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices/ Teraz, aby obrócić swój odtwarzacz w kierunku wroga, za pomocą GLM, można to zrobić:
1) W klasach graczy i wroga, oświadczam, macierz i wektor 3D na stanowisko
glm::mat4 matrix;
glm::vec3 position;
2) obrócić w kierunku wroga z
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), aby obrócić w kierunku wroga odtwarzaczu zrobić
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
Jeśli chcesz zapisać wszystko w matrycy, nie deklaruje pozycję jako zmienna, ale jako funkcja
vec3 position(){
return vec3(matrix[3][0],matrix[3][1],matrix[3][2])
}
i obracać z
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
W przypadku macierzy obrotu potrzebny jest wektor kierunkowy (np. Oś) ** i ** kąt. Biorąc pod uwagę tylko kierunek, o którym mówisz? – 6502
Chcę to zrobić: Vec3 dirToEnemy = (Enemy.Position - Player.Position) .normalize(); Player.Matrix.makeRotationDir (dir); Player.Attack(); – UfnCod3r
@ 6502: nie, dla macierzy obrotu można również użyć trzech wektorów (x, y, z) – SigTerm