LibGdx:从投影计算视图矩阵

时间:2016-12-21 15:26:03

标签: android 3d libgdx google-cardboard virtual-reality

我目前正致力于与LibGDX集成Google VR Sdk。作为起点,我使用了这个:https://github.com/yangweigbh/Libgdx-CardBoard-Extension

但是我对它并不满意,因为它不遵循LibGDX项目的一般项目结构,所以我开始重构和移动事物。到目前为止一切都那么好,我有一个运行的演示显示一个旋转的立方体。

现在我想从这里开始添加SkyboxLibGDX 0.9.9 - Apply cubemap in environment

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

所以现在我的问题是。如果我有投影矩阵,我怎么能得到正确的quaterion才能用于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);
    }
}

0 个答案:

没有答案