随着鼠标移动相机目标位置

时间:2013-10-01 12:51:16

标签: camera position mousemove opengl-3 linear

我正在使用Jogl中的现代OpenGL(3.3+)重写我的应用程序。

我正在使用所有常规矩阵,即objectToWorld,WorldToCamera和CameraToClip(或模型,视图和投影)

我创建了一个用于处理所有鼠标移动的类,正如McKesson在“学习现代3D图形编程”中所做的那样,使用一种方法来偏移相机目标位置

private void offsetTargetPosition(MouseEvent mouseEvent){

        Mat4 currMat = calcMatrix();

        Quat orientation = currMat.toQuaternion();

        Quat invOrientation = orientation.conjugate();        

        Vec2 current = new Vec2(mouseEvent.getX(), mouseEvent.getY());

        Vec2 diff = current.minus(startDragMouseLoc);

        Vec3 worldOffset = invOrientation.mult(new Vec3(-diff.x*10, diff.y*10, 0.0f));

        currView.setTargetPos(currView.getTargetPos().plus(worldOffset));

        startDragMouseLoc = current;
    }

calcMatrix()返回相机矩阵,其余部分应清晰

我想要的是移动我的物体和鼠标,现在鼠标移动和物体转换不对应,即它们不是线性的,因为我正在处理不同的空间我猜...

我了解到如果我想在空间O中应用变换T,但在空间C中相关,我应该使用p作为顶点执行以下操作

C *(C * T * C ^ -1)* O * p

我应该做类似的事吗?

1 个答案:

答案 0 :(得分:0)

我用一个该死的简单比例解决了......

        float x = (float) (10000 * 2 * EC_Main.viewer.getAspect() * diff.x / EC_Main.viewer.getWidth());
        float y = (float) (10000 * 2 * diff.y / EC_Main.viewer.getHeight());
        Vec3 worldOffset = invOrientation.mult(new Vec3(-x, y, 0.0f));

考虑我的投影矩阵

Mat4 orthographicMatrix = Jglm.orthographic(-10000.0f * (float) EC_Main.viewer.getAspect(), 10000.0f * (float) EC_Main.viewer.getAspect(),
                    -10000.0f, 10000.0f, -10000.0f, 10000.0f);