Camera 使用鼠标移动相机目标位置
我正在使用Jogl中的现代OpenGL 3.3+重写我的应用程序 我使用的是所有传统的矩阵,即objectToWorld、WorldToCamera和CameraToClip或model、view和projection 我创建了一个用于处理所有鼠标移动的类,就像McKesson在学习现代3d图形编程时所做的那样,该编程使用了一种偏移相机目标位置的方法: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
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);