Введение в OpenGL на Qt/C++. Часть 1.
В данном уроке мне хотелось бы изложить основы программирование графики с использованием OpenGL на платформе Qt/C++.
Первая часть является вводной, и для понимания материала читателю достаточно понимать основы программирования на С++.
Чтобы подключить OpenGL в Qt достаточно в файле проекта (*.pro) прописать
Qt += opengl
Мы создадим класс Widget, в котором и будет производится отрисовка.
Рисовать мы будем квадрат в 3d пространстве. В следующей части мы научимся его вращать и приближать.
Создаваемый класс должен наследоваться от QGLWidget.
class Widget: public QGLWidget { };
Теперь нам надо переобпределить некоторые методы:
1) void initializeGL();
2) void resizeGL(int nWidth, int nHeight);
3) void paintGL();
Первый метод инициализирует само окно, второй вызывается при изменении размеров окна, а в третьем реализовывается сама отрисовка.
Так как кода получается не очень много, приведу сразу весь:
#include "widget.h" Widget::Widget(QWidget *parent) // конструктор : QGLWidget(parent) { resize(300,300); // задаем размеры окна } void Widget::initializeGL() { qglClearColor(Qt::white); // заполняем экран белым цветом glEnable(GL_DEPTH_TEST); // задаем глубину проверки пикселей glShadeModel(GL_FLAT); // убираем режим сглаживания цветов glEnable(GL_CULL_FACE); // говорим, что будем строить только внешние поверхности glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); // фигуры будут закрашены с обеих сторон } void Widget::resizeGL(int nWidth, int nHeight) { glViewport(0, 0, nHeight, nHeight); // установка точки обзора glMatrixMode(GL_PROJECTION); // установка режима матрицы glLoadIdentity(); // загрузка матрицы } void Widget::paintGL() // рисование { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // очистка экрана glMatrixMode(GL_MODELVIEW); // задаем модельно-видовую матрицу glLoadIdentity(); // загрузка единичную матрицу QColor halfGreen(0, 128, 0, 255); // устанавливаем цвет квадрата qglColor(halfGreen); // задаем цвет glBegin(GL_QUADS); // говорим, что рисовать будем прямоугольник // задаем вершины многоугольника glVertex3f(0.5, 0.5, 0.5); glVertex3f(-0.5, 0.5, 0.5); glVertex3f(-0.5, -0.5, 0.5); glVertex3f(0.5, -0.5, 0.5); glEnd(); }
Вот и всё, несложными манипуляциями мы отрисовали квадрат в 3d пространстве с помощью OpenGL.
Теперь в файле main.cpp создаем экземпляр нашего класса и вызываем метод отображения.
Все исходники можно скачать в прикрепленных к статье материалах.
Пример работы программы:
Прикрепленный файл | Размер |
---|---|
KatyaOGL_pt1.zip | 1.53 кб |