- •Синтаксис команд
- •Void glBegin(
- •Void glEnd(
- •Void glPointSize(
- •Void glLineWidth(
- •Треугольники
- •Четырехугольники и многоугольники
- •1. Основные шаги для построения минимальной программы
- •Int glutCreateWindow(const char *title);
- •Void glutDisplayFunc(void (*func)(void));
- •Void glutReshapeFunc(void (*func)(int width, int height));
- •Void glutMainLoop(void);
- •2. Работа с окнами в glut
- •Void glutSetWindow(int win);
- •Int glutGetWindow(void);
- •Void glutSetCursor(int cursor);
- •Void glutGameModeString(const char *string);
- •Int glutEnterGameMode(void);
- •Void glutLeaveGameMode(void);
- •3. Связь между glut и вашей OpenGl программой
- •Void glutDisplayFunc(void (*func)(void));
- •Void glutReshapeFunc(void (*func)(int width, int height));
- •Void glutVisibilityFunc(void (*func)(int state));
- •Void glutIdleFunc(void (*func)(void));
- •Void glutTimerFunc(unsigned int millis, void (*func)(int value), int value);
- •Void glMatrixMode(
- •Void glViewport(
- •Void glFinish(
- •Преобразования объектов
- •Работа с матрицами
- •Модельно-Видовые преобразования
- •Проекции
- •Область вывода
- •Демонстрационные программы Пример 1: Простое glut-приложение
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);
Программа чертит линию посередине экрана. Вот текст самой программы:
![]()
#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;
}
![]()
