2. Основные шаги для построения минимальной программы Прежде всего необходимо научиться самому основному - это созданию окна, в котором можно будет рисовать с помощью OpenGL. Минимальная программа, которая создает окно и что-нибудь рисует там состоит из следующих шагов:
Итак, рассмотрим все 5 пунктов поподробнее: 1. Инициализация GLUT производится командой: void glutInit(int *argcp, char **argv); Первый параметр представляет из себя указатель на количество аргументов в командной строке, а второй - указатель на массив аргументов. Обычно эти значения берутся из главной функции программы: int main(int argc, char *argv[]). 2. Установка параметров окна содержит в себе несколько этапов. Прежде всего необходимо указать размеры окна: void glutInitWindowSize(int width, int height); Первый параметр width - ширина окна в пикселях, второй height - высота окна в пикселях. Отмечу также, что если эту команду опустить, то GLUT сам установит размеры окна по умолчанию, обычно это 300x300. Далее можно задать положение создаваемого окна относительно верхнего левого угла экрана. Делается это командой: void glutInitWindowPosition(int x, int y); Необходимо также установить для окна режим отображения информации. Т.е. установить для окна такие параметры как: используемая цветовая модель, количество различных буферов, и т.д. Для этого в GLUT существует команда: void glutInitDisplayMode(unsigned int mode); У команды имеется единственный параметр, который может быть представлен одной из следующих констант или комбинацией этих констант с помощью побитового ИЛИ.
Вот пример использования этой команды:void glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); 3. Создание окна. После того как окно установлено необходимо его создать. int glutCreateWindow(const char *title); Эта команда создаёт окно с заголовком, который вы укажете в качестве параметра и возвращает HANDLER окна в виде числа int. Этот HANDLER обычно используется для последующих операций над этим окном, таких как изменение параметров окна и закрытие окна. 4. Установка функций, отвечающих за рисование в окне и изменении формы окна. После того, как окно, в которое будет выводится или как говорят рендерится графическая информация, подготовлено и создано, необходимо связать с ним процедуры, которые будут отвечать за вывод графической информации, следить за размерами окна, следить за нажатиями на клавиши и т.д. Самая первая и самая необходимая функция которую мы рассмотрим, отвечает за рисование. Именно она всегда будет вызываться операционной системой, чтобы нарисовать (перерисовать) содержимое окна. Итак, задаётся эта функция командой: void glutDisplayFunc(void (*func)(void)); Единственный параметр этой функции - это указатель на функцию, которая будет отвечать за рисование в окне. Например чтобы функция void Draw(void), определенная в вашей программе отвечала за рисование в окне, надо присоединить ее к GLUT следующим образом: glutDisplayFunc(Draw); И ещё одна функция, которая по моему мнению является важной - это функция, которая отслеживает изменения окна. Как только у окна изменились размеры, необходимо перестроить вывод графической информации уже в новое окно с другими размерами. Если этого не сделать, то например увеличив размеры окна, вывод информации будет производиться в старую область окна, с меньшими размерами. Определить функцию, отвечающую за изменение размеров окна нужно следующей командой: void glutReshapeFunc(void (*func)(int width, int height)); Единственный параметр - это указатель на функцию, отвечающую за изменение размеров окна, которая как видно должна принимать два параметра width и height, соответственно ширина и высота нового (измененного) окна. 5. Вход в главный цикл GLUT. Ну и последнее, что необходимо сделать, чтобы запустить нашу программу - это войти в так называемый главный цикл GLUT. Этот цикл запускает на выполнение так называемое сердце GLUT, которое обеспечивает взаимосвязь между операционной системой и теми функциями, которые отвечают за окно, получают информацию от устройств ввода/вывода. Для того, чтобы перейти в главный цикл GLUT, надо выполнить единственную команду: void glutMainLoop(void); Вот в принципе основные шаги для самой простейшей GLUT программы. Теперь я приведу эту самую программу. Как вы сейчас убедитесь - это очень легкая программа и трудного тут ничего нет. И ещё, прежде чем использовать функции из GLUT необходимо к программе подключить заголовок: #include <GL/glut.h>. Программа чертит линию посередине экрана. Вот текст самой программы: #include <GL/glut.h> void Reshape(int width, int height) { glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-1, 1, -1, 1); glMatrixMode(GL_MODELVIEW); } void Draw(void) { glClear(GL_COLOR_BUFFER_BIT); glColor3f(0.0f, 0.0f, 1.0f); glLineWidth(1); glBegin(GL_LINES); glVertex2f(0, 0.5f); glVertex2f(0, -0.5f); glEnd(); glFlush(); } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitWindowSize(400, 300); glutInitWindowPosition(100, 100); glutInitDisplayMode(GLUT_RGB); glutCreateWindow("Romka Demo"); glutReshapeFunc(Reshape); glutDisplayFunc(Draw); glClearColor(0, 0, 0, 0); glutMainLoop(); return 0; }
Полный исходный код программы можно взять отсюда: simple_demo.zip После того как наша первая программа готова, я расскажу вам немножко поподробнее об операциях с окнами. |