Я переписываю свое приложение, используя современный OpenGL (3.3+) в Jogl.Переместить целевое положение камеры вместе с мышью
Я использую все обычные матрицы, то есть 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() возвращает матрицу камеры, остальное должно быть ясно
То, что я хочу, движется мой объект вместе с мышью, справа теперь движение мыши и перевод объекта не соответствуют, то есть они не являются линейными, потому что я имею дело с разными пространствами, я думаю ..
Я узнал, что если я хочу применить преобразование T в пространстве O, но связанное в пространстве с, я должен сделать следующее с р как вершина
C * (C * T * C^-1) * О * р
должен ли я сделать что-то подобное?