|
Работа с цветом в библиотеке OpenGL
Работа с цветом в библиотеке OpenGL
Приднестровский Государственный Университет им. Т.Г.Шевченко Контрольная работа №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); 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 '\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(); } Результаты:
|
|