在Android OpenGL中
它具有命令setLookAtM以指定摄像机视图的位置
Matrix.setLookAtM(mViewMatrix, 0, eyeX, eyeY, eyeZ, lookX, lookY,
lookZ, upX, upY, upZ);
如果我旋转相机,请使用命令rotateM
Matrix.rotateM(mViewMatrix, 0 , angle , 0.0f, 1.0f, 0.0f);
那么,我怎样才能从mViewMatrix获得'LookAt'精确的相机视图?
相机视图位置,我想要的是相机看的x,y,z
答案 0 :(得分:2)
小心,因为调用rotateM在技术上不会旋转相机,它会对任何将来绘制的对象应用旋转。 (这并不意味着同样的事情)。
然而,一般来说,如果你有一个视图矩阵,并且想要看到它面向哪个方向,你想要通过视图矩阵的逆转换眼睛空间前向量(0,0,1)。 / p>
当视图矩阵将世界空间中的矢量转换为眼睛空间时,逆视图矩阵将矢量从眼睛空间转换为世界空间。
所以你可以:
在#3之后,您将拥有世界空间中相机眼的方向。将它添加到眼睛的位置,你应该知道它指向的位置。
答案 1 :(得分:1)
我已经完成了我的问题 这是我的解决方案
首先,我需要制作这个3矩阵来得到x,y,z位置的结果
private float[] mRotXMatrix = new float[] {
1, 0, 0, 0,
0, 0, 1, 0,
0, 1, 0, 0,
0, 0, 0, 1 };
private float[] mRotYMatrix = new float[] {
0, 0, 1, 0,
0, 1, 0, 0,
1, 0, 0, 0,
0, 0, 0, 1 };
private float[] mRotZMatrix = new float[] {
0, 1, 0, 0,
1, 0, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1 };
然后在onSensorChanged(SensorEvent e)方法中,我将所有这3个矩阵与我的相机视图一起旋转
Matrix.multiplyMM(mViewMatrix, 0, deltaRotationMatrix, 0, mViewMatrix, 0);
Matrix.multiplyMM(mRotXMatrix, 0, deltaRotationMatrix, 0, mRotXMatrix, 0);
Matrix.multiplyMM(mRotYMatrix, 0, deltaRotationMatrix, 0, mRotYMatrix, 0);
Matrix.multiplyMM(mRotZMatrix, 0, deltaRotationMatrix, 0, mRotZMatrix, 0);
要获得我的相机视图的X,Y,Z,只需从这些矩阵中获取
viewX = mRotXMatrix[2];
viewY = -mRotYMatrix[6]; // +/- up to your initial camera view
viewZ = mRotZMatrix[10];