Мой план:
1. Рассчитать направление мыши [x, y] [success]
Событие перемещения мыши:
int directionX = lastPosition.x - position.x;
int directionY = lastPosition.y - position.y;
2. Рассчитать углы [тета, фи] [успех]
float theta = fmod(lastTheta + sensibility * directionY, M_PI);
float phi = fmod(lastPhi + sensibility * directionX * -1, M_PI * 2);
Редактировать {
исправление ошибки:
float theta = lastTheta + sensibility * directionY * -1;
if (theta < M_PI / -2)theta = M_PI / -2;
else if (theta > M_PI / 2)theta = M_PI / 2;
float phi = fmod(lastPhi + sensibility * directionX * -1, M_PI * 2);
}
Теперь я дал тэта , фи , центральную точку и радиус , и я хочу вычислить позицию и вращение [что камера смотрит в центр]
3. Рассчитать координаты положения [X, Y, Z] [не удалось]
float newX = radius * sin(phi) * cos(theta);
float newY = radius * sin(phi) * sin(theta);
float newZ = radius * cos(phi);
Решение [от meowgoesthedog]:
float newX = radius * cos(theta) * cos(phi);
float newY = radius * sin(theta);
float newZ = radius * cos(theta) * sin(phi);
4. Рассчитать вращение [не удалось]
float pitch = ?;
float yaw = ?;
Решение [от meowgoesthedog]:
float pitch = -theta;
float yaw = -phi;
Спасибо за ваши решения!