В этом уроке мы тоже не будем углублятся глубоко: рассмотрим только рисование примитивов, таких, как треугольники, квадраты и линии.
За основу возьмём код прошлого урока (инициализация), немного изменив его.
В файл main.h добавим новую структуру — CVertex3. Буква «C» в начале означает, что это класс либо структура. «3» в конце означает, что в этой структуре 3 координаты, т.к. позже нам понадобятся и вершины с двумя координатами.
Итак, в файл main.h после обьявления extern`ов добавьте:
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(). Она всё инициализирует, пусть заодно и о переменных позаботится =)
{
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()
{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);
}
Вот и всё, и если сейчас вы скомпилируете сцену — увидите квадрат с треугольником
по диагонали, и линию между ними. Просто, не так ли? =)