Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Camera 使用鼠标移动相机目标位置_Camera_Position_Mousemove_Opengl 3 - Fatal编程技术网

Camera 使用鼠标移动相机目标位置

Camera 使用鼠标移动相机目标位置,camera,position,mousemove,opengl-3,Camera,Position,Mousemove,Opengl 3,我正在使用Jogl中的现代OpenGL 3.3+重写我的应用程序 我使用的是所有传统的矩阵,即objectToWorld、WorldToCamera和CameraToClip或model、view和projection 我创建了一个用于处理所有鼠标移动的类,就像McKesson在学习现代3d图形编程时所做的那样,该编程使用了一种偏移相机目标位置的方法: private void offsetTargetPosition(MouseEvent mouseEvent){ Mat4 currM

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

我使用的是所有传统的矩阵,即objectToWorld、WorldToCamera和CameraToClip或model、view和projection

我创建了一个用于处理所有鼠标移动的类,就像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


我应该做类似的事情吗?

我用一个非常简单的比例来解决

        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);