Сейчас я занимаюсь разработкой движка для трехмерной игры (очень просто, только кубы и, возможно, несколько других простых трехмерных объектов).
Я использую C ++, а для графики SFML это 2d графическая библиотека для C ++.
У меня уже есть формула для перспективной проекции:
S будет положение точки на экране.
P будет позицией точки в трехмерном пространстве.
E — положение глаза (камеры).
Sx = ((Ez * (Px — Ex)) / (Ez + Pz)) + Ex
Sy = ((Ez * (Py — Ey)) / (Ez + Pz)) + Ey
Теперь это работает отлично!
то, что я хочу сделать сейчас, это вращение самой камеры.
Я уже думал о вращении всего остального вокруг камеры, потому что я могу сделать это быстро с моим текущим кодом, который включает функцию «rotateAroundPoint» для 3d-точки.
Но есть ли что-нибудь быстрее и проще, чем это? Любое дополнение к моей формуле / новый, который позволяет мне вращать саму камеру?
Спасибо за любую помощь и надеюсь, что у кого-то есть решение; D
Арад Арбле.
Делать мои комментарии ответом.
Я бы посоветовал вам изучить конвейер, который используют основные графические библиотеки для рендеринга. (OpenGL, например.) SFML использует OpenGL под капотом, поэтому вам не нужно изобретать велосипед. ВотЕще один пример с OpenGL.
Также посмотрите на существующие матричные библиотеки как GLM которые обеспечивают необходимые вам преобразования. Ваш конвейер рендеринга будет намного быстрее, если вы сможете сконфигурировать необходимые преобразования в несколько матриц, которые OpenGL может использовать. Например, уравнения в вашем вопросе обычно делятся на модельная матрица (чтобы преобразовать положение каждой вершины из модели / локального пространства -> мирового пространства), посмотреть матрицу (чтобы преобразовать мировое пространство -> пространство камеры, заставляя вершины казаться как бы с точки зрения камеры), и перспективы матрица проекции (преобразовать из пространства камеры -> пространство экрана, и определить такие вещи, как поле зрения). Когда все эти матрицы умножаются вместе, вы получаете конечную матрицу, которая при умножении на вектор положения дает вам позицию в пространстве экрана. Таким образом, эта окончательная матрица применяется к каждой вершине в вашей сцене, которая включает преобразования модели, преобразования камеры, деление перспективы, отсечение и т. Д., Чтобы получить окончательный результат отрисовки этой вершины на экране.
Чтобы ответить на ваш оригинальный вопрос, традиционно «камера» представлена комбинацией посмотреть матрицу и матрица проекции. Чтобы повернуть камеру, все, что вам нужно сделать, это применить преобразование вращения (или, возможно, «посмотри на«трансформируйся; трудно сказать по твоему вопросу) к твоему посмотреть матрицу, и математика перейдет к следующим операциям в конвейере.
Других решений пока нет …