Libgdx轨迹相机和广告牌

时间:2017-03-05 13:36:30

标签: libgdx

我刚刚在libgdx中实现了一个arcball cam

    private void rotate(float pitch, float yaw, float roll) {
        tempQuat.setEulerAngles(pitch, yaw, roll);
        rotationQuat.mulLeft(tempQuat);
    }

...

    float aspect = camera.viewportWidth / camera.viewportHeight;
    camera.projection.setToProjection(Math.abs(camera.near), Math.abs(camera.far), camera.fieldOfView, aspect);
    camera.view.setToLookAt(camera.position, tempVector.set(camera.position).add(camera.direction), camera.up);

        rotate(MyGestureListener.mXAngle, MyGestureListener.mYAngle, 0);
        camera.view.rotate(rotationQuat);

    camera.combined.set(camera.projection);
    Matrix4.mul(camera.combined.val, camera.view.val);

    camera.invProjectionView.set(camera.combined);
    Matrix4.inv(camera.invProjectionView.val);
    camera.frustum.update(camera.invProjectionView);

一切正常,但有一点不好:

我有一些贴纸总是旋转到相机作为广告牌:

        p.decalPoint.setPosition(p.pos.x, p.pos.y, p.pos.z);
        p.decalPoint.setRotation(camera.direction, camera.up);

现在这已经破了。为什么?我该如何解决这个问题?

我需要一个像这里的弧形相机:

https://youtu.be/YxNjjyv8W0I

上面的代码效果很好,但广告牌不能使用凸轮。

2 个答案:

答案 0 :(得分:1)

您绕过相机并手动更新矩阵和平截头体成员,但忘记更新其他成员。因此,您还必须更新其他成员(例如positiondirectionup),或者使用相机提供的功能:

  • 不需要致电camera.projection.setToProjection
  • 不需要致电camera.view.setToLookAt
  • camera.view.rotate的来电是camera.rotate
  • 不需要致电camera.combined.setMatrix4.mul
  • 不需要致电camera.invProjectionView.setMatrix4.inv
  • 不需要致电camera.frustum.update
  • 致电camera.update();

有关详细信息,另请参阅http://www.badlogicgames.com/wordpress/?p=1550

答案 1 :(得分:0)

我最终使用了两个旋转矩阵和一个camfocusvector作为一个弧形球

四元数不适合此