Android LibGdx:从投影计算视图矩阵
我目前正在研究Google VR Sdk与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
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);
}
}