要完成您在评论中想要做的事情,您还需要知道您的玩家之前的方向。实际上,最好的方法是将有关玩家位置和方向(以及游戏中几乎所有其他内容)的所有数据存储在一个4x4矩阵中。通过向3x3旋转矩阵添加第四列和第四行,并使用额外的列来存储关于玩家位置的信息来实现此目的。这背后的数学(齐次坐标)相当简单,在OpenGL和DirectX中非常重要。我建议您参考这个很棒的教程:
http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices/。现在,使用GLM将您的玩家旋转到敌人位置,可以这样做:
1)在您的玩家和敌人类中,声明一个矩阵和3d向量来表示位置。
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) )
3) 要将敌人朝向玩家旋转,执行以下操作:
enemy.matrix = glm::LookAt(
enemy.position, // position of the player
player.position, // position of the enemy
vec3(0.0f,1.0f,0.0f) )
如果您想将所有内容存储在矩阵中,不要将位置声明为变量,而应声明为函数。
vec3 position(){
return vec3(matrix[3][0],matrix[3][1],matrix[3][2])
}
并旋转
player.matrix = glm::LookAt(
player.position(), // position of the player
enemy.position(), // position of the enemy
vec3(0.0f,1.0f,0.0f) )
x^2+y^2+z^2=1
的实数也不足够(原点周围的旋转数量比单位球面上的点还要多)。 - 6502