Как отсечь рендеринг в OpenGL (C++)

Как отсечь рендеринг в OpenGL (простая прямоугольная область)? Отправьте пример C++.

5
задан topright gamedev 18 May 2010 в 22:00
поделиться

2 ответа

Если вы хотите отобразить только определенный прямоугольник, вам понадобится комбинация чего-то вроде glFrustrum или glOrtho вместе с glViewPort ]. Фактически, это glViewPort , который устанавливает прямоугольник отсечения. glFrustrum , glOrtho ( gluPerspective и т. Д.) Затем сопоставьте некоторый набор реальных координат с этим прямоугольником. Обычно вы почти не замечаете glViewPort , потому что он обычно устанавливается на всю область любого окна, которое вы используете, и вы меняете отображение для получения различных представлений в окне.

Если вы просто настроите glFrustum (например) отдельно, область отображения на экране останется прежней, и вы просто измените сопоставление, чтобы вы по-прежнему заполняли всю область окна , и в основном просто перемещайте виртуальную камеру, чтобы увеличивать или уменьшать масштаб (и т. д.) отображаемого «мира». И наоборот, если вы просто настроите glViewPort , вы отобразите точно такие же данные, но в меньшем прямоугольнике.

Чтобы «закрепить» данные на меньшем прямоугольнике, вам нужно настроить оба сразу в более или менее «противоположных» направлениях, чтобы по мере того, как прямоугольник вашего окна обзора становится меньше, вы увеличиваете пирамиду обзора для компенсации.

2
ответ дан 14 December 2019 в 01:03
поделиться

Что вам, вероятно, нужно, так это механизм ножниц OpenGL.

Он зажимает рендеринг пикселей, которые не попадают в прямоугольник, определенный параметрами x, y, width и height.

Заметим также, что это состояние OpenGL, когда оно включено, влияет на команду glClear, ограничивая очищаемую область.

7
ответ дан 14 December 2019 в 01:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: