LibGDX 相机旋转在 Android 上不起作用

问题描述 投票:0回答:1

我有来自 Android 设备 RotationVector 传感器 的方向值,以度数表示为偏航角、俯仰角和滚动角。我想根据这些方向值持续更新 LibGDX 透视相机旋转。我的目标是构建一个 3D 指南针

在 render() 方法中我正在尝试:

@Override
public void render() {
    ScreenUtils.clear(Color.BLACK, true);

    // do some rendering
    modelBatch.begin(cam);
    modelBatch.render(instance, lights);
    modelBatch.end();
    
    // calculate/get the orientation angles
    float Yaw = ...;
    float Pitch = ...;
    float Roll = ...;

    // update camera orientation
    cam.view.setFromEulerAngles(Yaw, Pitch, Roll);
    cam.update();
}

我在 Android 设备方向变化的 logcat 中看到不断变化的偏航/俯仰/滚动值,但不幸的是我的模型(3D 指南针)不旋转。上面的代码有什么问题?为什么相机旋转不起作用?

android camera libgdx orientation android-sensors
1个回答
0
投票

这是因为您无法直接更新

view
PerspectiveCamera
,因为它会被对
update
的调用覆盖。

您可以通过修改

PerspectiveCamera
position
(或观察目标)来控制
direction

您需要根据滚动、偏航和俯仰计算新方向,然后将其设置在

camera
上。

仅供参考,这是

update
PerspectiveCamera
的实现:

public void update(boolean updateFrustum) {
    float aspect = this.viewportWidth / this.viewportHeight;
    this.projection.setToProjection(Math.abs(this.near), Math.abs(this.far), this.fieldOfView, aspect);
    this.view.setToLookAt(this.position, this.tmp.set(this.position).add(this.direction), this.up);
    this.combined.set(this.projection);
    Matrix4.mul(this.combined.val, this.view.val);
    if (updateFrustum) {
        this.invProjectionView.set(this.combined);
        Matrix4.inv(this.invProjectionView.val);
        this.frustum.update(this.invProjectionView);
    }

}

注意,它会被覆盖

view

此答案仅适用于您确实使用

PerspectiveCamera
的情况。

© www.soinside.com 2019 - 2024. All rights reserved.