♦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) {


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