/* половина длины стороны квадрата */

/* режим рисования */

/* позиция растра */

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);

⇐ Предыдущая| |Следующая ⇒