Để làm những gì bạn muốn làm trong nhận xét, bạn cũng cần biết định hướng trước đó của người chơi. Trên thực tế, điều tốt nhất cần làm là lưu trữ tất cả dữ liệu về vị trí và hướng của trình phát của bạn (và hầu như mọi thứ khác trong trò chơi) vào ma trận 4x4. Điều này được thực hiện bằng cách "thêm" một cột thứ tư và hàng thứ tư vào ma trận xoay 3x3 và sử dụng cột phụ để lưu trữ thông tin về vị trí của trình phát. Toán học đằng sau này (tọa độ đồng nhất) khá đơn giản và rất quan trọng trong cả OpenGL và DirectX. Tôi đề nghị bạn hướng dẫn tuyệt vời này http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices/ Bây giờ, để xoay nghe nhạc của bạn đối với kẻ thù của bạn, sử dụng GLM, bạn có thể làm điều này:
1) Trong lớp người chơi và kẻ thù của bạn, khai báo một ma trận và vector 3d cho vị trí
glm::mat4 matrix;
glm::vec3 position;
2) xoay về phía kẻ thù với
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) để xoay kẻ thù đối với các cầu thủ, làm
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
Nếu bạn muốn lưu trữ tất cả mọi thứ trong ma trận, không khai báo vị trí như là một biến nhưng như một hàm
vec3 position(){
return vec3(matrix[3][0],matrix[3][1],matrix[3][2])
}
và xoay với
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
Đối với ma trận xoay, bạn cần véc tơ hướng (ví dụ: trục) ** và ** góc. Chỉ định hướng bạn đang nói về vòng xoay nào? – 6502
tôi muốn làm điều này: Vec3 dirToEnemy = (Enemy.Position - Player.Position) .normalize(); Player.Matrix.makeRotationDir (dir); Player.Attack(); – UfnCod3r
@ 6502: không, đối với ma trận xoay, bạn cũng có thể sử dụng ba vectơ (x, y, z) – SigTerm