У меня есть 3D-сцена с тремя одинаково расположенными прямоугольниками, я хочу, чтобы камера могла вращаться вокруг цели камеры и перемещаться в любом направлении, как обычно, как камера в приложении для 3D-моделирования, однако моя настройка работает только тогда, когда мойЦель камеры располагается в исходном положении, всякий раз, когда я перемещаю камеру в любом направлении, положение моей камеры и цель камеры корректно переводятся в новое положение, однако моя камера все еще вращается вокруг начала сцены
, показанное ниже изображениецель моей камеры и вращение в начале координат системы координат
на изображении ниже показано, как цель моей камеры смещена влево, однако камера поворачивается относительно начала координат системы координат
Ниже приведен мой код для поворота и перемещения камеры на плоскости x / y:
if (event.type == SDL_MOUSEMOTION && leftMouseButtonPressed == true)
{
New.x = event.button.x;
New.y = event.button.y;
delta = New - prev;
if (delta.x != 0) {
angleX = delta.x / 2.0f;
rotMat = glm::mat4(1);
rotMat = glm::rotate(rotMat, glm::radians(angleX), up);
cameraUp = glm::normalize(glm::vec4(up, 1) * rotMat);
cameraRight = glm::normalize(glm::cross(cameraUp, cameraDirection));
cameraPos = rotMat * glm::vec4(cameraPos, 1) ;
cameraDirection = glm::normalize(cameraPos - cameraTarget);
camera = glm::lookAt(cameraPos, cameraTarget, up);
}
if (event.type == SDL_MOUSEMOTION && rightMouseButtonPressed == true)
{
New.x = event.button.x;
New.y = event.button.y;
delta = New - prev;
if (delta.x != 0) {
delta.x /= 10.0f;
translateMat = glm::mat4(1);
translateMat = glm::translate(translateMat, cameraRight * delta.x);
cameraPos = translateMat * glm::vec4(cameraPos, 1);
cameraTarget = translateMat * glm::vec4(cameraTarget, 1) ;
camera = glm::lookAt(cameraPos, cameraTarget , cameraUp);
}