3D перспективная проекция с вращением камеры

Сейчас я занимаюсь разработкой движка для трехмерной игры (очень просто, только кубы и, возможно, несколько других простых трехмерных объектов).
Я использую C ++, а для графики SFML это 2d графическая библиотека для C ++.

У меня уже есть формула для перспективной проекции:

S будет положение точки на экране.
P будет позицией точки в трехмерном пространстве.
E — положение глаза (камеры).

Sx = ((Ez * (Px — Ex)) / (Ez + Pz)) + Ex

Sy = ((Ez * (Py — Ey)) / (Ez + Pz)) + Ey

Теперь это работает отлично!
то, что я хочу сделать сейчас, это вращение самой камеры.
Я уже думал о вращении всего остального вокруг камеры, потому что я могу сделать это быстро с моим текущим кодом, который включает функцию «rotateAroundPoint» для 3d-точки.

Но есть ли что-нибудь быстрее и проще, чем это? Любое дополнение к моей формуле / новый, который позволяет мне вращать саму камеру?

Спасибо за любую помощь и надеюсь, что у кого-то есть решение; D
Арад Арбле.

0

Решение

Делать мои комментарии ответом.

Я бы посоветовал вам изучить конвейер, который используют основные графические библиотеки для рендеринга. (OpenGL, например.) SFML использует OpenGL под капотом, поэтому вам не нужно изобретать велосипед. ВотЕще один пример с OpenGL.

Также посмотрите на существующие матричные библиотеки как GLM которые обеспечивают необходимые вам преобразования. Ваш конвейер рендеринга будет намного быстрее, если вы сможете сконфигурировать необходимые преобразования в несколько матриц, которые OpenGL может использовать. Например, уравнения в вашем вопросе обычно делятся на модельная матрица (чтобы преобразовать положение каждой вершины из модели / локального пространства -> мирового пространства), посмотреть матрицу (чтобы преобразовать мировое пространство -> пространство камеры, заставляя вершины казаться как бы с точки зрения камеры), и перспективы матрица проекции (преобразовать из пространства камеры -> пространство экрана, и определить такие вещи, как поле зрения). Когда все эти матрицы умножаются вместе, вы получаете конечную матрицу, которая при умножении на вектор положения дает вам позицию в пространстве экрана. Таким образом, эта окончательная матрица применяется к каждой вершине в вашей сцене, которая включает преобразования модели, преобразования камеры, деление перспективы, отсечение и т. Д., Чтобы получить окончательный результат отрисовки этой вершины на экране.

Чтобы ответить на ваш оригинальный вопрос, традиционно «камера» представлена ​​комбинацией посмотреть матрицу и матрица проекции. Чтобы повернуть камеру, все, что вам нужно сделать, это применить преобразование вращения (или, возможно, «посмотри на«трансформируйся; трудно сказать по твоему вопросу) к твоему посмотреть матрицу, и математика перейдет к следующим операциям в конвейере.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]