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

В этом уроке мы тоже не будем углублятся глубоко: рассмотрим только рисование примитивов, таких, как треугольники, квадраты и линии.

За основу возьмём код прошлого урока (инициализация), немного изменив его.

В файл main.h добавим новую структуру — CVertex3. Буква «C» в начале означает, что это класс либо структура. «3» в конце означает, что в этой структуре 3 координаты, т.к. позже нам понадобятся и вершины с двумя координатами.
Итак, в файл main.h после обьявления extern`ов добавьте:

struc CVertex3{
float x,y,z;
};

 

С этим файлом всё. Переходим к main.cpp
Сначала мы обьявим несколько вершин CVertex3 — это будут вершины, составляющие наши фигуры.
Потом перейдем в функцию RenderScene (), и всё остальное будем делать в ней.

Итак, в файле main.cpp после строки «#include main.h» добавьте:

#include «main.h»

// Вершины квадрата
CVertex3 QPoint1, QPoint2, QPoint3, QPoint4;
// Вершины линии
CVertex3 LPoint1, LPoint2;
// Вершины треугольника
CVertex3 TPoint1, TPoint2, TPoint3;

 

Далее идем к функции Init (). Она всё инициализирует, пусть заодно и о переменных позаботится =)

void Init(HWND hWnd)
{
g_hWnd = hWnd;
GetClientRect(g_hWnd, &g_rRect);
InitializeOpenGL(g_rRect.right, g_rRect.bottom);// Инициализируем наши координаты
// Квадрат:
QPoint1.x = 1; QPoint1.y=0; QPoint1.z=0;
QPoint2.x = 0;  QPoint2.y=0; QPoint2.z=0;
QPoint3.x = 0;  QPoint3.y=1; QPoint3.z=0;
QPoint4.x = 1; QPoint4.y=1; QPoint4.z=0;// Треугольник
TPoint1.x = 0; TPoint1.y = 1; TPoint1.z=0;
TPoint2.x = 1; TPoint2.y = 1; TPoint2.z=0;
TPoint3.x = 1; TPoint3.y = 0; TPoint3.z=0;// Линия
LPoint1.x = 1; LPoint1.y = 1; LPoint1.z=0;
LPoint2.x = 1; LPoint2.y = 1; LPoint2.z = 0;
}

 

Теперь у нас есть координаты вершин для наших фигур, остаётся только передать их OpenGL в нужном порядке. Сделаем это в функции RenderScene ()

void RenderScene()
{glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();// Эта функция перемещает обьект, следующий за её вызовом на (X,Y,Z).
// То есть после вызова glTranslateF все рисуемые обьекты будут перемещены.
glTranslatef(0.0f,0.f, — 5.0f);// Рисуем квадрат. Заметьте, мы рисуем его против часовой стрелки.
// Запоминайте порядок рисования вершин и не путайте его, он будет нужен вам
// при использовании нормалей и др.
glBegin(GL_QUADS);
glVertex3f(QPoint1.x, QPoint1.y, QPoint1.z);    // Нижний левый угол
glVertex3f(QPoint2.x, QPoint2.y, QPoint2.z);    // Нижний правый
glVertex3f(QPoint3.x, QPoint3.y, QPoint3.z);    // Верхний правый
glVertex3f(QPoint4.x, QPoint4.y, QPoint4.z);    // Верхний левый
glEnd();

// Рисуем треугольник
glBegin(GL_TRIANGLES);
glVertex3f(TPoint1.x, TPoint1.y, TPoint1.z);
glVertex3f(TPoint2.x, TPoint2.y, TPoint2.z);
glVertex3f(TPoint3.x, TPoint3.y, TPoint3.z);
glEnd();

glBegin(GL_LINES);
glVertex3f(LPoint1.x, LPoint1.y, LPoint1.z);
glVertex3f(LPoint2.x, LPoint2.y, LPoint2.z);
glEnd();

SwapBuffers(g_hDC);
}

 

Вот и всё, и если сейчас вы скомпилируете сцену — увидите квадрат с треугольником
по диагонали, и линию между ними. Просто, не так ли? =)

Исходные коды к уроку

Понравилась статья? Поделиться с друзьями: