2012-08-06 41 views
0

在Android中的OpenGL获取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该相机看

example

回答

1

我已经完成了我的问题 ,这是我的解决方案

首先,我需要在onSensorChanged(SensorEvent以使这个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 }; 

然后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,只是从这些MATR得到它我的相机视图IX

viewX = mRotXMatrix[2]; 
viewY = -mRotYMatrix[6]; // +/- up to your initial camera view 
viewZ = mRotZMatrix[10]; 
+0

什么是deltaRotationMatrix为什么会mRotXMatrix是mRotYMatrix不同等等,如果你申请相同的multiplyMM – Burf2000 2013-04-15 14:22:21

2

要小心,因为调用rotateM技术上不旋转的摄像头,它适用旋转到任何未来的对象绘制。 (这不意味着同样的事情)。但是一般情况下,如果你有一个视图矩阵,并且你想看看它面对的是哪个方向,你想要通过视图矩阵的逆向变换眼睛空间向前的向量(0,0,1)。

由于视角矩阵将世界空间中的向量转换为眼睛空间,反向视角矩阵将向量从眼睛空间转换为世界空间。

因此,您可以:

  1. 应用任意操作当前视图矩阵
  2. 采取逆
  3. 乘以逆矩阵(0,0,1,0)。 (请注意,这与拔出逆矩阵的第三列相同)。

#3之后,你将在世界空间中拥有相机眼睛的方向。将此添加到眼睛的位置,并且您应该知道它指向哪个点。

+0

真的感谢答复,添 然而,从第三塔的3值只是**旋转值**表示陀螺传感器的程度..不是精确的位置的x,y, ž 我知道,这个数值可能导致的结果,但我无法弄清楚如何转换这3个值以得到确切位置 – 2012-08-07 06:38:37