Я пытаюсь реализовать камеру, которая вращается вокруг источника, где я успешно реализовал возможность рыскания, используя функцию gluLookat. Я пытаюсь реализовать высоту тона, но у меня есть несколько проблем с результатом (высота тона работает только тогда, когда я отклоняюсь от определенной точки, а затем - высоты тона).
Вот моя попытка:
float distance, // radius (from origin) updated by -, + keys
pitch, // angle in degrees updated from W, S keys (increments of +- 10)
yaw; // angle in degrees updated from A, D keys (increments of +- 10)
view = lookAt(
Eigen::Vector3f(distance * sin(toRadians(pitch)) * cos(toRadians(yaw)), distance * sin(toRadians(pitch)) * sin(toRadians(yaw)), distance * cos(toRadians(pitch))),
Eigen::Vector3f(0.0f, 0.0f, 0.0f),
Eigen::Vector3f(0.0f, 0.0f, 1.0f));
proj = perspective(toRadians(90.0f), static_cast<float>(width) / height, 1.0f, 10.0f);
Я чувствую, что моя проблема - это вектор Up, но я не уверен, как правильно его обновить (и в то же время я думаю, что все в порядке, так как я всегда хочу, чтобы ориентация камеры оставалась неизменной, я очень хочется просто переместить положение камеры)
Редактировать: Я хотел бы добавить, что я рассчитываю информацию, основанную на позиции, найденную здесь: http://tutorial.math.lamar.edu/Classes/CalcIII/SphericalCoords.aspx Я не уверен, что математика, обсуждаемая здесь, напрямую переходит, поэтому, пожалуйста, поправьте меня если не так.