ПриднестровскийГосударственный Университет
им.Т.Г.Шевченко
Контрольнаяработа №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();
}
//Функция вызывается приизменении размеров окна
voidReshape(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();
}
// Функция обработкисообщений с клавиатуры
voidKeyboard(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(intargc, char* argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB);
glutInitWindowSize(Width,Height);
glutCreateWindow(«wtf»);
glutDisplayFunc(Display);
glutReshapeFunc(Reshape);
glutKeyboardFunc(Keyboard);
glutMainLoop();
}
Результаты:
/>