Наконец, можно использовать следующую функцию для запроса системы о некоторых текущих параметрах состояния.
glutGet (stateParam); Данная функция возвращает целое значение, соответствующее символьной константе, выбранной в качестве аргумента. Например, можно получить координату х левого верхнего угла текущего окна на экране относительного левого верхнего угла экрана, использовав константу GLUT_WINDOW_X. Можно также получить текущую ширину окна или экрана, использовав константу GLUT_WINDOW_WIDTH или GLUT_SCREEN_WI DTH.
ПРИМЕР ПРОГРАММЫ ДВУХМЕРНОГО НАБЛЮДЕНИЯ OpenGL
Продемонстрируем использование функции поля просмотра OpenGL, расщепив экран, чтобы показать две проекции треугольника в плоскости ху, центр масс которого находится в начале внешней системы координат. Изначально поле просмотра определяется в левой половине окна на экране, здесь же синим цветом отображается исходный треугольник. Затем для того же самого отсекающего окна определяется другое поле просмотра для правой половины окна, а цвет заполнения меняется на красный. Затем треугольник вращается относительно центра масс и отображается во втором поле просмотра. Оба треугольника, выводимые на экран данной программой, показаны на рис. 6.10.
Рис. 6.10. Расщепление экрана в окне с помощью процедуры сИэ-р1ауГсп
♦include <GL/glut.h> class wcPt2D { public:
GLfloat x, y; }; void init (void) {
/* Задается белый цвет окна на экране. */ glClearColor (1.0, 1.0, 1.0, 0.0);
/* Задаются параметры отсекающего окна во внешних координатах. */
glMatrixMode (GL_PROJECTION); gluOrtho2D (-100.0, 100.0, -100.0, 100.0);
/* Задается режим построения геометрической матрицы преобразования. */
glMatrixMode (GL_MODELVIEW); } void triangle (wcPt2D *verts) {
GLint k;
glBegin (GL_TRIANGLES); for (k = 0; k < 3; k++)
glVertex2f (verts [k].x, verts [k].y); glEnd ( ); } void displayFcn (void) {
/* Определяется исходное положение треугольника. */ wcPt2D verts [3] = { {-50.0, -25.0}, {50.0, -25.0},
{0.0, 50.0} };
glClear (GL_COLOR_BUFFER_BIT); // Очищается окно.
glColor3f (0.0, 0.0, 1.0); // Цвет заполнения - синий.
glViewport (0, 0, 300, 300);
/* Задается левое поле просмотра. */
triangle (verts); // Отображается треугольник.
/* Треугольник поворачивается и отображается в правой
* половине окна. */
glColor3f (1.0, 0.0, 0.0); // Цвет заполнения - красный.
glViewport (300, 0, 300, 300);
/* Задается правое поле просмотра. */
glRotatef (90.0, 0.0, 0.0, 1.0); // Поворот вокруг оси z.
triangle (verts);
/* Отображается красный повернутый треугольник. */ glFlush ( );
}
void main (int arge, char ** argv) { glutlnit (Sarge, argv);
glutlnitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutlnitWindowPosition (50, 50); glutlnitWindowSize (600, 300); glutCreateWindow ("Пример расщепления экрана"); init ( );