На прошлом уроке мы настроили OpenGL и теперь что-нибудь нарисуем в нашем окне. Наш код будет размещаться в функции display() между glClear() и glFlush(). Сначала нарисуем треугольник. Зададим цвет с помощью функции glColor3ub(). Эта функция принимает три параметра (красный, зеленый, синий), каждый из которых в диапазоне (0; 255). Например так: glColor3ub( 145, 30, 66). Теперь напишем сам фрагмент кода рисования.
void display() { glClear(GL_COLOR_BUFFER_BIT); //рисуем треугольник glColor3ub( 145, 30, 66); glBegin(GL_TRIANGLES); glVertex3f( 0.0f, 0.8f, 0.0f); //верхняя вершина glVertex3f(-0.4f,0.4f, 0.0f); //левая вершина glVertex3f( 0.4f,0.4f, 0.0f); //правая вершина glEnd(); ////////////////////////////////// glFlush(); }
Функции glBegin() и glEnd() отвечают за начало и конец рисования соответственно. Параметр GL_TRIANGLES сообщает, что мы будем рисовать треугольник, три раза вызывая glVertex3f(). Функция glVertex3f() принимает значения x,y,z в формате float. Значения x и y лежат в диапазоне (-1; 1). Мы задали три вершины с координатами: (0; 0.8), (-0.4; 0.4), (0.4; 0.4). Третий параметр отвечает за ось z. Он равен 0, так как у нас 2d фигуры.
Теперь нарисуем прямоугольник. Будем использовать функцию glRectf(). Она принимает координаты левого верхнего угла и правого нижнего. Также зададим другой цвет.
void display() { glClear(GL_COLOR_BUFFER_BIT); //рисуем треугольник glColor3ub( 145, 30, 66); glBegin(GL_TRIANGLES); glVertex3f( 0.0f, 0.8f, 0.0f); //верхняя вершина glVertex3f(-0.4f,0.4f, 0.0f); //левая вершина glVertex3f( 0.4f,0.4f, 0.0f); //правая вершина glEnd(); ////////////////////////////////// //рисуем прямоугольник glColor3ub( 239, 211, 52); glRectf(-0.2f, 0.4f, 0.2f, 0.0f); /////////////////////////////////// glFlush(); }
У нас получился домик). Теперь еще добавим основание. Для этого нарисуем отрезок с толщиной, например, 50. Также зададим другой цвет.
void display() { glClear(GL_COLOR_BUFFER_BIT); //рисуем треугольник glColor3ub( 145, 30, 66); glBegin(GL_TRIANGLES); glVertex3f( 0.0f, 0.8f, 0.0f); //верхняя вершина glVertex3f(-0.4f,0.4f, 0.0f); //левая вершина glVertex3f( 0.4f,0.4f, 0.0f); //правая вершина glEnd(); ////////////////////////////////// //рисуем прямоугольник glColor3ub( 239, 211, 52); glRectf(-0.2f, 0.4f, 0.2f, 0.0f); /////////////////////////////////// //рисуем отрезок glLineWidth(50); //задаем толщину glColor3ub( 60, 170, 60); glBegin(GL_LINES); glVertex3f(-0.9, 0.0, 0.0); glVertex3f(0.9, 0, 0); glEnd(); /////////////////////////////////// glFlush(); }
Для рисования отрезка достаточно двух точек. В нашем случае (-0.9; 0) и (0.9; 0).
У нас получился симпатичный домик). И теперь полный код программы.
#include "glut.h" void display() { glClear(GL_COLOR_BUFFER_BIT); //рисуем треугольник glColor3ub( 145, 30, 66); glBegin(GL_TRIANGLES); glVertex3f( 0.0f, 0.8f, 0.0f); //верхняя вершина glVertex3f(-0.4f,0.4f, 0.0f); //левая вершина glVertex3f( 0.4f,0.4f, 0.0f); //правая вершина glEnd(); ////////////////////////////////// //рисуем прямоугольник glColor3ub( 239, 211, 52); glRectf(-0.2f, 0.4f, 0.2f, 0.0f); /////////////////////////////////// //рисуем отрезок glLineWidth(50); //задаем толщину glColor3ub( 60, 170, 60); glBegin(GL_LINES); glVertex3f(-0.9, 0.0, 0.0); glVertex3f(0.9, 0, 0); glEnd(); glFlush(); } void main() { glutInitWindowSize(500, 500); glutInitWindowPosition(100, 140); glutCreateWindow("OpenGL window"); glClearColor(0, 0, 1, 1); glutDisplayFunc(display); glutMainLoop(); }