/* половина длины стороны квадрата */
/* режим рисования */
/* позиция растра */
GLfloat г = 1.0, g = 1.0, b = 1.0; /* цвет переднего плана */ int fill = 0; /* флаг заливки */
/*..........................
void drawSquare(int х, int у)
*/
y=wh-y;
glColor3ub( (char) rand()%256, (char) rand()1256, (char) rand()%256);
glBegin(GL_POLYGON);
glVertex2f(x+size, y+size);
glVertex2f(x-size, y+size);
glVertex2f(x-size, y-size);
glVertex2f(x+size, y-size); glEnd();
/* Программа перерисовки при изменении размеров или положения окна */ void myReshape(GLsizei w, GLsizei h) {
/* adjust clipping box */ Настройка рамки отсечения */
glMatrixMode(GL_PROJECTION); glLoadldentityO;
glOrtho(0.0, (GLdouble)w, 0.0, (GLdouble)h, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity(J;
/* Настройка видового окна и его очистка */
glViewport(0,0,w,h);
glClearColor (0.8, 0.8, 0.8, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
displayoT glFlush();
A.6. Программа рисования 535
/*
*/
/* Установка глобальных размеров окна. Эти данные потребуются программе вывода изображения */
ww = w; wh = h;
}
/*.............------------------*/
void myinit() {
glviewport(0,0,ww,wh);
/* Установка размеров отсекающей рамки в соответствии с размерами окна. Такая настройка позволяет избежать масштабирования координат объектов при изменении размеров окна. */
glMatrixMode(GL_PR0JECTION);
glLoadIdentity();
glOrtho(0.0, (GLdouble)ww , 0.0,
(GLdouble)wh , -1.0, 1.0);
/* Установка черного цвета фона и очистка окна */ glClearColor (0.8, 0.8, 0.8, 1.0); glClear(GL_COLOR_BUFFER_BIT); glFlush();
}
/*..........---------------------*/
void mouse(int btn, int state, int x, int y) {
static int count; int where;
static int xp[2],yp[2);
if(btn==GLUT_LEFT_BUTTON && state==GLUT_DOWN) {
glPushAttrib(GL_ALL_ATTRIB_BITS);
where = pick(x,y); glColor3f(r, g, b); if(where != 0) {
count =0; draw_mode = where;
}
else switch(drawjnode) {
case(LINE): if(count==0) {
Приложение А. Демонстрационные программы
count++; xp[0] = x; yp[0] = y;
}
else
{
glBegin(GL_LINES);
glVertex2i(x,wh-y);