Наконец, можно использовать следующую функцию для запроса системы о некоторых текущих параметрах состояния.

glutGet (stateParam); Данная функция возвращает целое значение, соответствующее символьной константе, выбранной в качестве аргумента. Например, можно получить координату х левого верхнего угла текущего окна на экране относительного левого верхнего угла экрана, использовав константу GLUT_WINDOW_X. Можно также получить текущую ширину окна или экрана, использовав константу GLUT_WINDOW_WIDTH или GLUT_SCREEN_WI DTH.

ПРИМЕР ПРОГРАММЫ ДВУХМЕРНОГО НАБЛЮДЕНИЯ OpenGL

Продемонстрируем использование функции поля просмотра OpenGL, расщепив экран, чтобы показать две проекции треугольника в плоскости ху, центр масс которого находится в начале внешней системы координат. Изначально поле просмотра определяется в левой половине окна на экране, здесь же синим цветом отображается исходный треугольник. Затем для того же самого отсекающего окна определяется другое поле просмотра для правой половины окна, а цвет заполнения меняется на красный. Затем треугольник вращается относительно центра масс и отображается во втором поле просмотра. Оба треугольника, выводимые на экран данной программой, показаны на рис. 6.10.

Расщепление экрана в окне с помощью процедуры сИэ-р1ауГсп

Рис. 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 ( );


⇐ вернуться назад | | далее ⇒