我在游戏中有以下矩阵我正在进行逆向工程以了解它是如何工作的。
我设法在渲染模型时捕获此矩阵:
0.999971, 0.003148, -0.006994, 0.000000
0.000000, 0.911863, 0.410494, 0.000000
0.006903, -0.410485, 0.911844, 0.000000
-25014.388672, 11944.956055, -19475.357422, 1.000000
我开始使用以下方法计算角度:
Point CalculateRotatation(float ModelView[16])
{
Point Result;
Result.X = atan2(ModelView[9], ModelView[10]) * (180 / PI);
Result.Y = atan2(-ModelView[8], ModelView[9]) * (180 / PI);
Result.Z = atan2(ModelView[4], ModelView[0]) * (180 / PI);
return Result;
}
我关注的是:http://db-in.com/blog/2011/04/cameras-on-opengl-es-2-x/
我不确定我是否正确地做到了。游戏不使用OpenGL-ES,但我不确定它是否重要。
你们有没有人告诉我,如果我走在正确的道路上,或者我的计算功能是否正确? Y值似乎是错误的。我知道有很多这样的线索,我看了看他们,但他们似乎没有做我所拥有的。他们使用点积和交叉产品。我只需要确认或一点帮助。
编辑:我非常了解:
我知道X和Y旋转的计算是正确的。如果我从左到右改变角色的视图,Z增加/减少。如果我改变角色的视野高度,则X增加/减少。然而,我不知道它是对的还是如何得到它...我有这个图:
答案 0 :(得分:3)
从旋转矩阵中提取固定角度可以有多个答案,因为它涉及反三角函数和平方根。例如,如果旋转序列是x-y-z(带行向量系统),则公式如下所示。
AngleX = atan2(m11, m22)
AngleY = atan2(-m02, sqrt(m00^2 + m01^2))
AngleZ = atan2(m01, m00)
但是,这不是故事的结尾。我确信this article会帮助您找到更好的方法。祝你好运!