GLFW. Скелет OpenGL приложения со сглаживанием.
Что прочитать перед этим материалом
GLFW. Скелет OpenGL приложения со сглаживанием
В это уроке вы научитесь создавать приложения с использованием OpenGL в связке с библиотекой GLFW, предназначенной для создания оконных приложений, позволяющая быстро реализовывать поддержку OpenGL 3.2.
Перейдем к созданию скелета GLFW-приложения с полноэкранным сглаживанием.
В чем главные преимущества библиотеки GLFW?
- она постоянно совершенствуется и поддерживается, по сравнению даже с Freeglut, который давненько не обновляется (за исключением последнего обновления связанного с multitouch), об этом свидетельствует дата релиза последней версии GLFW;
- кроссплатформенность;
- простота и доступность в использовании, и частично напоминает старый добрый glut;
- встроенная возможность загружать TGA изображения и удобные функции установки текстуры;
- можно пролинковать статически.
Итак, небольшой скелет GLFW-приложения:
Код:
#include "GL\glfw.h" // или <GL\glfw.h> если поместили либу в глобальные пути
#include <iostream>
int main()
{
int width, height;
int frame = 0;
bool running = true;
glfwInit(); // инициализация библиотеки
glfwOpenWindowHint(GLFW_FSAA_SAMPLES, 4); // установка количества образцов для просчета сглаживания буфера
if( !glfwOpenWindow( 1024, 768, 0, 0, 0, 0, 0, 0, GLFW_WINDOW ) )// открытие окна с нужными параметрами
{
std::cout<<"error!";
glfwTerminate(); // освобождает ресурсы, закрывает окно
return 0;
}
glfwSetWindowTitle("GLFW Application"); // установка заголовка окна
while(running) // главный цикл приложения MainLoop
{
if(glfwGetKey(GLFW_KEY_RIGHT))frame++;
if(glfwGetKey(GLFW_KEY_LEFT))frame--;
glfwGetWindowSize( &width, &height ); // получение размеров окна
height = height > 0 ? height : 1; // защищаемся от деления на ноль
glViewport( 0, 0, width, height ); // установка области просмотра
glClearColor( 0.0f, 0.0f, 0.0f, 0.0f ); // установка цвета очистки
glClear( GL_COLOR_BUFFER_BIT ); // чистим
glMatrixMode( GL_PROJECTION ); // ставим текущей матрицу проектирования
glLoadIdentity(); // загрузка единичной матрицы
gluPerspective( 65.0f, (GLfloat)width/(GLfloat)height, 1.0f, 100.0f );
glMatrixMode( GL_MODELVIEW ); // ставим текущей модельную матрицу
glLoadIdentity(); // загружаем единичную матрицу
gluLookAt(0.0f, -10.0f, 0.0f,
0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f );
glRotatef(frame, 0.25f, 1.0f, 0.75f); // поворачиваем модельную матрицу
glBegin( GL_QUADS ); // рисуем четырехугольник
// установка цвета рисования
glColor3f(1.0f, 0.0f, 0.0f );
// задания позиции вектора фигуры
glVertex3f(0.0f, 0.0f, -4.0f);
glColor3f(0.0f, 1.0f, 0.0f );
glVertex3f(-1.0f, -2.0f, -4.0f);
glColor3f(0.0f, 0.0f, 1.0f );
glVertex3f(3.0f, -2.0f, -4.0f);
glColor3f(0.0f, 0.0f, 1.0f );
glVertex3f(3.0f, 0.0f, -4.0f);
glEnd();
glfwSwapBuffers(); // меняем задний буфер и передний местами
// выход из цикла при нажатии esc или при закрытии окна
running = !glfwGetKey(GLFW_KEY_ESC) && glfwGetWindowParam( GLFW_OPENED);
}
glfwTerminate(); // освобождает ресурсы, закрывает окно (если оно открыто)
return 0;
}
Некоторые моменты по коду:
- glfwOpenWindowHint (GLFW_FSAA_SAMPLES, 4) - установка количества образцов, которые будут использованы в мультисэмплинг буфере для просчета сглаживания. Чем выше количество, тем лучше качество сглаживания. Но в то же время чем больше образцов, тем больше накладных ресурсов памяти для буферов, которые могут снизить производительность.
- int glfwOpenWindow (int width, int height, int redbits, int greenbits, int bluebits, int alphabits, int depthbits, int stencilbits, int mode) - здесь все просто, мы передаем нужные параметры для открытия окна, но некоторые параметры у меня были переданы нулем. Это сделано для того, чтобы GLFW использовала параметры по умолчанию.
- glfwGetKey(GLFW_KEY_ESC) - опрос клавиши Escape, если клавиша нажата, функция вернет 1, если нет, то 0.
Сборка приложения
Не забудьте пролинковать GLFW-библиотеку, либо локально, положив в тот же каталог, что и проект, и указав линкеру имя. Либо же поместив в глобальные пути вашей среды разработки, также указав имя линкеру. Также пролинкуйте OpenGL и GLU библиотеки (рис. 1).

После удачной сборки и запуска можно понажимать влево и вправо, чтобы повращать четырехугольник.