Экономические риски и мотивация инновационной деятельности
Приднестровский
Государственный Университет
им.
Т.Г.Шевченко
Контрольная
работа №2
Тема: «Работа
с цветом в библиотеке OpenGL».
Тирасполь, 2010 г.
1. Цель: Научиться
работать с цветом, используя графическую библиотеку OpenGL.
2. Задача: Написать
программу, отображающую:
1. квадрат, с меняющимся
цветом, в зависимости от изменения градиентов (R,G,B).
2. треугольник, вершины
которого имеют цвета (0. 1, 1), (1, 0, 1), (1, 1, 0).
3. прямоугольная полоса в
виде спектра.
3. Методика решения: Строим
поочередно данные фигуры, закрашивая соответствующими цветами.
Решение:
#include
<GL/glut.h>
#include
<stdlib.h>
#include
<math.h>
GLint Width =
800, Height = 600;
GLdouble r = 0, g = 0, b = 0;
//Функция вырисовки на
экране
void Display()
{
glClearColor(1,
1, 1, 1);
glClear(GL_COLOR_BUFFER_BIT);
// квадрат, меняющий цвет
glBegin(GL_QUADS);
glColor3d(r,
g, b);
glVertex2i(2,
10);
glVertex2i(2,
15);
glVertex2i(7,
15);
glVertex2i(7,
10);
glEnd();
//треугольник
glBegin(GL_TRIANGLES);
glColor3d(0,
1, 1);
glVertex2d(10,
10);
glColor3d(1,
0, 1);
glVertex2d(14,
15);
glColor3d(1,
1, 0);
glVertex2d(19, 10);
glEnd();
// полоска в виде спектра
glBegin(GL_QUAD_STRIP);
//красный
glColor3ub(255,
0, 0);
glVertex2d(2,
5);
glVertex2d(2,
7);
glVertex2d(3,
5);
glVertex2d(3,
7);
//оранжевый
glColor3ub(255,
128, 0);
glVertex2d(5,
5);
glVertex2d(5,
7);
//желтый
glColor3ub(255,
255, 0);
glVertex2d(7,
5);
glVertex2d(7,
7);
//зеленый
glColor3ub(0,
255, 0);
glVertex2d(9,
5);
glVertex2d(9,
7);
//голубой
glColor3ub(0,
255, 255);
glVertex2d(11,
5);
glVertex2d(11,
7);
//синий
glColor3ub(0,
0, 255);
glVertex2d(13,
5);
glVertex2d(13,
7);
//фиолетовый
glColor3ub(128,
0, 255);
glVertex2d(15,
5);
glEnd();
glFinish();
}
//Функция вызывается при
изменении размеров окна
void
Reshape(GLint w, GLint h)
{
Width = w;
Height = h;
// устанавливаем размеры
области отображения
glViewport(0, 0, w, h);
// отрографическая
проекция
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, 20,
0, 20, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
// Функция обработки
сообщений с клавиатуры
void
Keyboard(unsigned char key, int x, int y)
{
#define ESCAPE
'\033'
if (key ==
ESCAPE)
exit(0);
if (key ==
'r')
r -= 0.05;
if (key ==
'f')
r += 0.05;
if (key ==
't')
g -= 0.05;
if (key ==
'g')
g += 0.05;
if (key ==
'y')
b -= 0.05;
if (key ==
'h')
b += 0.05;
glutPostRedisplay();
}
// Главный
цикл приложения
void main(int
argc, char* argv[])
{
glutInit(&argc,
argv);
glutInitDisplayMode(GLUT_RGB);
glutInitWindowSize(Width,
Height);
glutCreateWindow("wtf");
glutDisplayFunc(Display);
glutReshapeFunc(Reshape);
glutKeyboardFunc(Keyboard);
glutMainLoop();
}
Результаты: