glClearColor (0.0, 0.0, 1.0, 1.0)
/* Цвет окна дисплея выбран синим. */ glMatrixMode (GL_PROJECTION) ; gluOrtho2D (0.0, 200.0, 0.0, 150.0);
}
void displayFcn (void) {
glClear (GL_COLOR_BUFFER_BIT);
/* Очищается окно на экране дисплея. */
glColor3f (1.0, 0.0, 0.0); // Заполнение красным цветом.
}
void winReshapeFcn (GLint newWidth, GLint newHeight) {
/* Обновление точки обзора и проекционных параметров. */
glViewport (0, 0, newWidth, newHeight); glMatrixMode (GL_PROJECTION); glLoadldentity ( );
gluOrtho2D (0.0, GLdouble (newWidth), 0.0,
GLdouble (newHeight));
/* Обновления параметров размера окна. */ winWidth = newWidth; winHeight = newHeight;
}
/* Отображается красный квадрат с заданной длиной сторон. */
void fillSquare (GLint button, GLint action, GLint xMouse,
GLint yMouse)
{
GLint xl, yl, x2, y2;
/* Левая кнопка мыши используется для выбора положения
* левого нижнего угла эхрана.
*/
if (button == GLUT_LEFT_BUTTON && action == GLUT_DOWN)
{
xl = xMouse;
yl = winHeight - yMouse; x2 = xl + edgeLength; y2 = yl + edgeLength; glRecti (xl, yl, x2, y2);
)
else
if (button == GLUT_RIGHT_BUTTON)
/* Правая кнопка мыши используется для выхода из
* программы.
*/
exit (0); glFlush ( );
>
/* Используйте клавиши <2>, <3> и <4>, чтобы увеличить
* квадрат.
*/
void enlargeSquare
(GLubyte sizeFactor, GLint xMouse, GLint yMouse) { switch (sizeFactor)
{
case '2' :
edgeLength *= 2;
break; case '3' :
edgeLength *= 3; break; case '4' :
edgeLength *= 4; break; default: break;
}
}
/* Используйте функциональные клавиши <F2> и <F4>, чтобы
* изменить масштаб с коэффициентом 1/2 и 1/4.
*/
void reduceSquare (GLint reductionKey, GLint xMouse,
GLint yMouse)
{
switch (reductionKey)
{
case GLUT_KEY_F2: edgeLength /= 2; break; case GLUT_KEY_F3: edgeLength /= 4; break; default: break;
}
}
void main (int argc, char** argv)
{
glutlnit (Sargc, argv);
glutlnitDisplayMode (GLUT_SINGLE | GLUT_RGB) ; glutlnitWindowPosition (100, 100); glutlnitWindowSize (winWidth, winHeight); glutCreateWindow ("Квадраты разного размер"); init ( ) ;
glutDisplayFunc (displayFcn); glutReshapeFunc (winReshapeFcn); glutMouseFunc (fillSquare); glutKeyboardFunc (enlargeSquare); glutSpecialFunc (reduceSquare); glutMainLoop ( );
}
ФУНКЦИИ GLUT (ПЛАНШЕТ)
Обычно активизация планшета выполняется, когда курсор мыши находится в окне дисплея. Далее, используя приведенную команду, записывается событие для ввода с планшета
glutTabletButtonFunc (tabletFcn); Аргументы вызываемой функции подобны тем, что используются при работе с мышью.
void tabletFcn (GLint tabletButton, GLint action,
GLint xTablet, GLint yTablet)
Клавиша планшета обозначается целым идентификатором, таким как 1, 2, 3 и т.д. Действие при нажатии клавиши задается с помощью GLUT_UP или GLUT_DOWN. Возвращенные значения xTablet и yTablet являются планшетными координатами. Число доступных кнопок планшета можно определить с помощью приведенной ниже команды.
glutDeviceGet (GLUT_NUM_TABLET_BUTTONS);