Как отсечь рендеринг в OpenGL (простая прямоугольная область)? Отправьте пример C++.
Если вы хотите отобразить только определенный прямоугольник, вам понадобится комбинация чего-то вроде glFrustrum
или glOrtho
вместе с glViewPort
]. Фактически, это glViewPort
, который устанавливает прямоугольник отсечения. glFrustrum
, glOrtho
( gluPerspective
и т. Д.) Затем сопоставьте некоторый набор реальных координат с этим прямоугольником. Обычно вы почти не замечаете glViewPort
, потому что он обычно устанавливается на всю область любого окна, которое вы используете, и вы меняете отображение для получения различных представлений в окне.
Если вы просто настроите glFrustum
(например) отдельно, область отображения на экране останется прежней, и вы просто измените сопоставление, чтобы вы по-прежнему заполняли всю область окна , и в основном просто перемещайте виртуальную камеру, чтобы увеличивать или уменьшать масштаб (и т. д.) отображаемого «мира». И наоборот, если вы просто настроите glViewPort
, вы отобразите точно такие же данные, но в меньшем прямоугольнике.
Чтобы «закрепить» данные на меньшем прямоугольнике, вам нужно настроить оба сразу в более или менее «противоположных» направлениях, чтобы по мере того, как прямоугольник вашего окна обзора становится меньше, вы увеличиваете пирамиду обзора для компенсации.
Что вам, вероятно, нужно, так это механизм ножниц OpenGL.
Он зажимает рендеринг пикселей, которые не попадают в прямоугольник, определенный параметрами x
, y
, width
и height
.
Заметим также, что это состояние OpenGL, когда оно включено, влияет на команду glClear
, ограничивая очищаемую область.