Приднестровский Государственный Университет им. Т. Г. Шевченко Контрольная работа № 2
Тема: «Работа с цветом в библиотеке OpenGL».
Тирасполь, 2010 г.
1. Цель: Научиться работать с цветом, используя графическую библиотеку OpenGL.
2. Задача: Написать программу, отображающую:
1. квадрат, с меняющимся цветом, в зависимости от изменения градиентов (R, G, B).
2. треугольник, вершины которого имеют цвета (0. 1, 1), (1, 0, 1), (1, 1, 0).
3. прямоугольная полоса в виде спектра.
3. Методика решения: Строим поочередно данные фигуры, закрашивая соответствующими цветами.
Решение:
#include
#include
#include
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);
glVertex2d (15, 7);
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 '33'
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 ();
}
Результаты: