Yorumunuzda yapmak istediğiniz şeyi yapmak için, youe Player'ın önceki yönlendirmesini de bilmeniz gerekir. Aslında, yapılacak en iyi şey, oynatıcınızın pozisyonu ve oryantasyonu hakkındaki tüm verileri (ve oyundaki hemen hemen her şey) bir 4x4 matrisinde saklamaktır. Bu, dördüncü bir sütunu ve dördüncü sırayı 3x3 rotasyon matrisine "ekleyerek" yapılır ve oyuncu konumu hakkındaki bilgileri saklamak için ekstra sütunu kullanın. Bunun arkasındaki matematik (homojen koordinatlar) hem OpenGL hem de DirectX'te oldukça basit ve çok önemlidir. Ben GLM kullanarak, düşmanın karşı çalarınızı döndürmek için, Şimdi bu harika öğretici http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices/ önermek, bunu yapabilirsiniz: En çalar ve düşman sınıflarında
1), pozisyon için bir matris ve 3d vektör beyan
glm::mat4 matrix;
glm::vec3 position;
2),
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) oyuncuya karşı düşman döndürmek için düşmanın doğru döndürün
do Eğer matris içinde her şeyi saklamak istiyorsanız
,
vec3 position(){
return vec3(matrix[3][0],matrix[3][1],matrix[3][2])
}
bir değişken olarak değil bir fonksiyonu olarak konumunu bildirmek ve tüm To
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
Döndürme matrisi için bir yön vektörüne (örneğin, bir eksen) ** ve ** bir açının olması gerekir. Sadece bir yön verildiğinde hangi rotasyondan bahsediyorsun? – 6502
Bunu yapmak istiyorum: Vec3 dirToEnemy = (Enemy.Position - Oyuncu.Position) .normalize(); Oyuncu.Matrix.makeRotationDir (dir); Player.Attack(); – UfnCod3r
@ 6502: Hayır, döndürme matrisi için üç vektörü de kullanabilirsiniz (x, y, z) – SigTerm