我目前正致力于与LibGDX
集成Google VR Sdk。作为起点,我使用了这个:https://github.com/yangweigbh/Libgdx-CardBoard-Extension
但是我对它并不满意,因为它不遵循LibGDX
项目的一般项目结构,所以我开始重构和移动事物。到目前为止一切都那么好,我有一个运行的演示显示一个旋转的立方体。
现在我想从这里开始添加Skybox
:LibGDX 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);
}
}