Таким образом, для настройки окна и порта просмотра из примера 3.2.1 нам следует использовать следующий код:

g1MatrixMode(GL_PR0JECTI0N): glLoadldentityO : g1u0rtho2D(0.0. 2.0. 0.0. 1.0): // sets the window // устанавливает окно glViewport(40. 60. 360. 240): // sets the viewport // устанавливает порт просмотра В дальнейшем каждая точка, отправленная в OpenGL посредством функции glVertex2*(x, у), подвергается преобразованию согласно уравнениям (3.3), а края автоматически отсекаются границами окна. (В главе 7 мы подробно рассмотрим, как это происходит в трехмерном случае; в процессе этого рассмотрения также станет понятно, что двумерный вариант является всего лишь частным случаем трехмерного.)

скачать Ashampoo Driver Updater.

Мы сделаем программы более читабельными, если инкапсулируем все настраивающие окно команды внутрь функции setWindowO, как показано в листинге 3.1. В листинге показана также функция setViewportO, внутрь которой упрятаны все детали OpenGL-функции gl Viewports .). Для простоты использования функции setViewport ее параметры слегка перегруппированы, чтобы соответствовать параметрам setWindowO, так что теперь в обеих функциях они идут в таком порядке: left, right, bottom, top (левый, правый, нижний, верхний).

Листинг 3.1. Полезные функции для настройки окна и порта просмотра

// ................. setWindow ..........................
void setWindow(float left, float right, float bottom, float top) {
g1MatrixMode(GL_PR0JECTI0N): glLoadldentityO;
glu0rtho2D(left. right, bottom, top):
}
// ................. setViewport ..........................
void setViewport(int left, int right, int bottom, int top) {
glViewportOeft. bottom, right - left, top - bottom):
}

Отметим, что для удобства мы используем для параметров функции setWindowO тип float. Параметры 1 eft, ri ght и т. д. автоматически преобразуются к типу GLDoubl е при передаче их функции gl u0rtho2D( ), как указано в прототипе этой функции. Подобным же образом мы используем тип int для параметров функции setViewportO, зная, что тип аргументов функции glViewportO также будет правильно преобразован.


⇐ Предыдущая| |Следующая ⇒