Уроки, алгоритмы, программы, примеры

Вход на сайт

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

Здравствуйте. Спасибо за проект. У меня вопрос, по какой причине определение принадлежности точки многоугольнику работает некорректно, если координаты из больших чисел состоят, например: int[] vertex = new int[] {...
Сейчас проверила нашла причину не запускания // Создание контекста воспроизведения OpenGL и привязка его к панели на форме OpenGLControl1:=TOpenGLControl.Create(Self); with OpenGLControl1 do begin Name:='OpenGLControl1'; //вот тут...
Ну..кажется что то пошло не так http://pp.usera...
Пример, к которому вы оставили комментарий строит именно то самое изображение на языке с#, которое вам необходимо. Отличается только цветовая палитра.

Счетчики и рейтинг

Рейтинг@Mail.ru
Среда программирования: 
Qt

Введение в 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.zip1.53 кб