Я использую SDL2 .
В настоящее время мой единственный шейдер имеет матрицу MVP и преобразует точки с ее помощью.
Я рассчитываю свою матрицу просмотра и проекции для камеры с GLM:
glm::lookAt(pos, pos + forward, up);
glm::perspective(fov, aspectRatio, zNear, zFar);
Я искал его, но я могу найти только устаревшую реализацию нескольких окон просмотра.
Если я создам, например, 4 камеры и скажем, что они все одинаковые , за исключением того, что каждая камера имеет различную четверть экрана для рендеринга. (Поэтому я хочу 4 видовых экрана с одинаковым содержанием)
Как я могу это сделать? Извините, если я не дал достаточно информации, не стесняйтесь спрашивать.
Ответы:
Рендеринг в разные видовые окна (части) одного экрана может быть выполнен следующим образом:
Например, разделение экрана на четыре части и рендеринг одной и той же сцены четыре раза в каждый угол с разными формами и разными областями просмотра:
источник
viewport
используются x, y левого нижнего угла фрагмента и ширина, высота фрагмента. С смешением вы можете экспериментировать.Если вы пишете свой собственный Vertex / Fragment Shader, есть еще одна дополнительная возможность сделать это. Это намного сложнее, но может быть полезно для вас и / или других. Кроме того, он ускоряет весь процесс рисования, поскольку использует только один вызов команды рисования. Максимальное количество Viewports определяется GL_MAX_VIEWPORTS и обычно составляет 16.
Начиная с OpenGL 4.1, метод glViewportArrayv существует. Он может определять массив Viewports. Видовые окна, созданные этим методом, имеют присвоенный индекс.
Этот индекс может быть использован в вершинном шейдере для установки области просмотра, в которой отображается сцена. (Вы должны включить расширение « ARB_shader_viewport_layer_array » в код шейдера)
В вашем случае я бы предложил сделать следующее:
источник
Это копия ответа @ narthex, за исключением только областей просмотра, поскольку это все, что вам нужно. Я не уверен, почему кадровый буфер / смесь смешивания включены в его ответ.
источник
Все это хорошие ответы, но есть и другой способ: (не всегда ли?)
В связи с растущей популярностью виртуальной реальности, сотрудники OculusVR разработали трио расширений «Multiview», которые называются:
Эти расширения позволяют визуализировать несколько видов одной и той же сцены в одном вызове отрисовки, устраняя избыточность рендеринга одной и той же сцены в одном и том же состоянии с точки зрения каждого глаза. Хотя созданный для целей VR, разработчик не обязательно ограничен просто двумя представлениями. Скорее, это расширение позволяет использовать столько представлений, сколько указано в MAX_VIEWS_OVR .
Перед использованием этих расширений разработчик должен проверить их поддержку в графическом драйвере пользователя, добавив следующий код:
Оттуда, это вопрос настройки вашего кадрового буфера для использования этой функции:
и аналогично в шейдере:
В приложении с привязкой к ЦП это расширение может значительно сократить время рендеринга, особенно в более сложных сценах :
источник