Прежде всего нам понадобится установить библиотеку glut — она поможет нам создать окно.
Для установки в ubuntu вам нужно выполнить следующую команду:
sudo apt-get install freeglut freeglut-dev
Теперь библиотека glut и её заголовочные файлы скачаны.
Для установки этой библиотеки в Windows вам понадобится скачать её вручную и скопировать в папку include вашего компилятора.
Приступим к созданию программы:
Включим необходимые заголовочные файлы:
#include <GL/glut.h> #include <math.h> #include <iostream> using namespace std;
Думаю тут объяснять что/зачем излишне.
Приступим к функции main:
int main(int argc, char **argv) { glutInit(&argc,argv); ///инициализируем glut glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); ///использовать 1 буфер, и цвет типа RGB (3 составляющие) glutInitWindowSize(240,240); ///зададим размер окна 240x240 glutInitWindowPosition(0,0); ///позиция открытия окна glutCreateWindow("Sin"); ///создать окно с именем "Sin" glClearColor(1.0 , 1.0 , 1.0 , 1.0); ///цвет фона окна glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-600.0,600.0,-200.0,200.0,-1.0,1.0); ///зададим размеры координатной сетки glutDisplayFunc(display); ///зададим функцию отображающую необходимые объекты glutMainLoop(); ///передает управление в glut return 0; }
Теперь перейдём к функции отображения — display. Чтобы немного усложнить и тем самым сделать интереснее задачу, я решил нарисовать в нашем окне синусоиду.
void display() { glClear(GL_COLOR_BUFFER_BIT); ///очистим буфер glColor3f(0.0,1.0,0.0); ///зададим цвет которым бедем "рисовать". Я выбрал зелёный. glBegin(GL_LINES); ///начнём рисовать первую координатную ось - OX. Будем это делать при помощи линий glVertex2f(-550,0); ///первая точка оси glVertex2f(550,0); ///вторая точка оси glEnd(); glBegin(GL_LINES); ////теперь проделаем тоже для оси OY glVertex2f(0,150); glVertex2f(0,-150); glEnd(); glBegin(GL_LINE_STRIP); ///начнём рисовать синусоиду при помощи ломаной линии glColor3f(1.0,0.0,0.0); ///выберем для неё красный цвет for (int i = -500; i <= 500; i++) { float y = 100 * sin(i*M_PI/180); ///вычислим текущую координату Y. Функция Sin() принимает значение в радианах, поэтому i следует умножить на число Пи и разделить на 180. Весь результат умножим на 100, указав тем самым максимальную высоту нашей синусоиды. glVertex2d(i,y); } glEnd(); glFlush(); }
Наша программа готова, осталось только её откомпилировать. Т.к. библиотека glut не является стандартной библиотекой C++ делать это следует таким образом:
g++ sin.cpp -o sin -lglut
Выполнив программу вы увидите что-то вроде этого: