♦include <GL/glut.h>
GLsizei winWidth = 400, winHeight = 300;
// Исходный размер окна на экране, void init (void)
{
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); // Цвет точки - красный.
glPointSize (3.0); // Размер точки - 3,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 plotPoint (GLint x, GLint y)
{
glBegin (GL_POINTS);
glVertex2i (x, y); glEnd ( );
>
/* Перемещение курсора при нажатой клавише <с> позволяет
* рисовать кривые от руки.
*/
void curveDrawing (GLubyte curvePlotKey, GLint xMouse,
GLint yMouse) {
GLint x = xMouse;
GLint у = winHeight - yMouse; switch (curvePlotKey)
{
case 'c':
plotPoint (x, y); break; default: break;
}
glFlush ( );
>
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); glutKeyboardFunc (curveDrawing); glutMainLoop ( ); Для функциональных клавиш, клавиш управления курсором и других специальных клавиш можно использовать команду
glutSpecialFunc (specialKeyFcn) ; Заданная процедура имеет три аргумента:
void specialKeyFcn (GLint specialKey, GLint xMouse,
GLint yMouse)
Однако теперь параметру specialKey присваивается целочисленное значение символьной константы GLUT. Чтобы выбрать функциональную клавишу, используем одну из констант от GLUT_KEY_F1 до GLUT_KEY_F12. Для клавиш управления курсором используем такие константы, как GLUT_KEY_UP и GLUT_KEY_RIGHT. Другие клавиши можно выделить, используя GLUT_KEY_PAGE_DOWN, GLUT_KEY_HOME и другие подобные константы для клавиш <Page Up>, <End> и <Insert>. Для использования клавиш <Backspace>, <Delete> и <Escape> нужна процедура glutKeyboard-Func и коды ASCII этих клавиш - 8, 127 и 27 соответственно.
Ниже в коде демонстрируется интерактивная программа, в которой использованы мышь, клавиатура и функциональные клавиши. Ввод мышью используется для выбора положения левого нижнего угла красного квадрата. Ввод с клавиатуры применяется для изменения масштаба квадрата, а при каждом щелчке левой кнопки мыши создается новый квадрат.
♦include <GL/glut.h> finclue <stdlib.h>
GLsizei winWidth = 400, winHeight = 300;
/* Исходный размер окна на экране. */
GLint edgeLength = 10;
/* Исходная длина стороны квадрата. */ void init (void) {