Android LibGdx:从投影计算视图矩阵

Android LibGdx:从投影计算视图矩阵,android,3d,libgdx,google-cardboard,virtual-reality,Android,3d,Libgdx,Google Cardboard,Virtual Reality,我目前正在研究Google VR Sdk与LibGDX的集成。作为一个起点,我用了这个: 然而,我并不是很满意它,因为它没有遵循LibGDX项目的一般项目结构,所以我开始重构并移动东西。到目前为止还不错,我有一个演示运行显示旋转立方体 现在我想添加一个Skybox,从这里开始: 图像是绘制的,但不像其他对象那样随着头部旋转而移动,因此我深入研究了CardboardCamera类,特别是关于设置投影矩阵的部分。 上面的Skybox类从相机的视图矩阵中获取一个四元数。但是,此矩阵不在Cardboar

我目前正在研究Google VR Sdk与
LibGDX
的集成。作为一个起点,我用了这个:

然而,我并不是很满意它,因为它没有遵循
LibGDX
项目的一般项目结构,所以我开始重构并移动东西。到目前为止还不错,我有一个演示运行显示旋转立方体

现在我想添加一个
Skybox
,从这里开始:

图像是绘制的,但不像其他对象那样随着头部旋转而移动,因此我深入研究了
CardboardCamera
类,特别是关于设置投影矩阵的部分。 上面的
Skybox
类从相机的视图矩阵中获取一个四元数。但是,此矩阵不在
CardboardCamera
类中设置;相反,它直接设置投影矩阵,而保持视图矩阵不变

所以我现在的问题是。如果我有投影矩阵,我如何获得用于Skybox的正确四元数,或者如何计算视图矩阵,使其
getRotation()
方法返回正确的值?如果两者都没有意义,我从哪里可以获得正确的
getRotation()
数据

CardboardCamera
类的相关代码:

public void setEyeProjection(Matrix4 projection) {
    this.projection.set(projection);
}

final Matrix4 tmpMatrix = new Matrix4();
final Vector3 tmpVec = new Vector3();
@Override
public void update(boolean updateFrustum) {
    // below line does not make much sense as position, direction and up are never set...
    view.setToLookAt(position, tmpVec.set(position).add(direction), up);
    tmpMatrix.set(eyeViewAdjustMatrix);
    Matrix4.mul(tmpMatrix.val, view.val);
    combined.set(projection);
    Matrix4.mul(combined.val, tmpMatrix.val);

    if (updateFrustum) {
        invProjectionView.set(combined);
        Matrix4.inv(invProjectionView.val);
        frustum.update(invProjectionView);
    }
}