OpenGL рисование примитивов

opengl

На прошлом уроке мы настроили 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 фигуры.

opengl

Теперь нарисуем прямоугольник. Будем использовать функцию 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();
}

opengl

У нас получился домик). Теперь еще добавим основание. Для этого нарисуем отрезок с толщиной, например, 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).

opengl

У нас получился симпатичный домик). И теперь полный код программы.

#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();
}
Вы можете оставить комментарий ниже.

Оставить комментарий

Яндекс.Метрика