我正在使用 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
我应该做类似的事情吗?