Название: CGL
Язык программирования: Microsoft Visual C++ 6.0, OpenGL, GLUT
Года: 2008-2009
CGL — библиотека для C++. Служит для облегчения инициализации. Позволяет добавлять графические элементы управления (кнопки, ползунки, текстовые окна, списки). Для чего нужна? Я создавал её в процессе изучения OpenGL и во время лабораторных работ и написания своего движка с векторно-процедурными объектами, который так и не дописал, так как оказалось, что я сильно недооценил сложность поставленной задачи.
Зачем он вам? В 2018 году уже точно не нужен. Но если вы изучаете НЕ OpenGL 4, а самый самый древний OpenGL 1 (интересно, зачем он вам), то эта библиотека может вам помочь.
Вы не знаете как инициализировать OpenGL? Инициализация OpenGL выглядит слишком сложной? Тогда эта библиотека для вас! По сути CGL является надстройкой над библиотекой glut. Так, что сначала вам нужно скачать файлы glut для Visual Studio 6.0. Или файлы glut для Visual Studio 2008 (x86). Если у вас другой компилятор, то вы всегда можете найти библиотеку glut и файлы include и lib для него в интернете. Если же вы скачали архив отсюда, то в нём вы найдете папки include и lib. Положите их содержимое в одноимённые папки в каталоге, где у вас установлен Visual Studio. По умолчанию для Visual Studio 6.0: C:\Program Files\Microsoft Visual Studio\VC98. А файл glut32.dll положите в папку system32 (такая должна быть в папке windows).
Сама библиотека CGL распространяется в виде исходных кодов. Скачать библиотеку CGL для Visual Studio 6.0 можете по этой ссылке (ZIP архив 93 КБ). Если у вас Visual Studio 2008, то вы можете скачать библиотеку CGL для Visual Studio 2008. В этом архиве есть проект main.dsp. Откройте его, скомпилируйте и запустите. Вы увидите небольшой пример работы CGL. Внимание! Я совсем не гарантирую, что CGL абсолютно законченный и рабочий проект. Вы используете его на свой страх и риск!
Инициализация OpenGL с помощью CGL
Пример инициализации OpenGL с помощью CGL:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
//////////////////////////////////////////////////////////////////////////////// //Автор: Урванов Фёдор //сайт: https://urvanov.ru //////////////////////////////////////////////////////////////////////////////// #include "cglstdafx.h" #include "cgl.h" #include //CGL * gl; void OnRender(void); int main(int argc, char *argv[]) { try{ CGL::InitOpenGL("CGL",&argc,argv); CGL::SetRenderProc(OnRender); CGL::MainLoop(); } catch(...) { fprintf(stderr,"A error detected.\n"); } return 0; } void OnRender(void) { //Сюда пишем всё то, что связано с прорисовкой того, что вам нужно. glTranslatef(0.0f,0.0f,-10.0f); //Вот так просто вы можете установить источник света!! CGL::SetPointLight(GL_LIGHT0,CGLVector3(0.0f,2.0f,0.0f),CGLColor(1.0f,1.0f,1.0f)); glLoadIdentity(); glTranslatef(0.0,0.0,-5.0); //С помощью стандартной функции glut рисуем сферу glutSolidSphere(1.0,10,10); } |
Добавление элементов управления (кнопок, слайдеров…)
Координатная сетка окна выглядит как показано на рисунке:
Область окна, на которое вы помещаете элементы управления всегда имеет форму квадрата. Если окно вытянуто по горизонтали или по вертикали, то элементы управления размещаются в наибольшем квадрате, который помещается в это окно. При создании любого элемента управления первые четыре параметра — координаты и размеры окна. Первые два параметра — позиция левого верхнего угла элемента управления. Вторые два — его ширина и высота. При изменении размеров окна размеры элементов управления будут изменяться автоматически.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
//////////////////////////////////////////////////////////////////////////////// //Автор: Урванов Фёдор Владиславович //сайт: https://urvanov.ru //////////////////////////////////////////////////////////////////////////////// #include "cglstdafx.h" #include "cgl.h" #include <iostream.h> //Объявляем прототипы void OnRender(void); void OnSpecialKey(GLint,GLint,GLint); void OnTimer(GLint value); void OnEndEdit(const string& p_strEnterText); void OnChoose(const string& p_strChoose); GLfloat alpha=90.0f; CGLVector3 v(1.0f,0.0f,0.0f); CGLFrame fr(10); //При нажатии любой кнопки будет выполняться эта процедура. void OnButton(void) { cout<<"Button pressed "<<cpputils::GetTimeString(); } //Тело программы int main(int argc, char *argv[]) { try{ CGL::InitOpenGL("CGL",&argc,argv); cout.setf(ios::unitbuf); //Устанавливаем Процедуру прорисовки. CGL::SetRenderProc(OnRender); //Устанавливаем процедуру обработки специальных кнопок CGL::SetSpecialKeyProc(OnSpecialKey); //Устанавливаем процедуру обработки событий от таймера CGL::SetTimerProc(OnTimer); CGLControl* p=NULL; //Ставим кнопку с надписью "Новая игра" и обработчиком нажатия OnButton //Первые четыре параметра - координаты. //Левый верхний угол окна -(0.0,0.0) //Правый нижний -(1.0,1.0) //Если окно не квадратное, то прорисовка контролов происходит //в наибольшем квадрате, помещаемымся в окне. p=new CGLButton(0.25,0.5,0.5,0.2,"Новая игра",OnButton); //Ставим кнопку с надписью "Выход" и обработчиком нажатия OnButton p=new CGLButton(0.25,0.8,0.5,0.2,"Выход",OnButton); //Инициализируем строку. Она нам потом пригодится:) string s="Эта миссия особенно сложная. Вы в составе группы из 3457 человек должны уничтожить злобного монстра.\nБудьте внимательны монстр не собирается сдаваться."; //Устанавливаем слайдер с надписью s. p=new CGLSlider(0.0,0.25,0.2,0.2,s); //Устанавливаем текстовое окно с надписью s p=new CGLTextBox(0.0,0.7,0.2,0.3,s); //Устанавливаем окно ввода с надписью "Введите ваше имя" и процедурой обработки нажатия Enter // - OnEndEdit. Заметьте у окна ввода есть кнопки прокрутки вверх и вниз (такие маленькие стрелочки //на правом бордуре). p=new CGLEditBox(0.75,0.0,0.25,0.1,"Введите ваше имя:",20,OnEndEdit); //Устанавливаем список с процедурой обработки выбора OnChoose b надписью MyListBox. CGLListBox *plb=new CGLListBox(0.75,0.6,0.25,0.4,"My list box",OnChoose); //Добавляем элементы списка plb->AddItem("first"); plb->AddItem("second"); plb->AddItem("The 3"); //Начинаем обрабатывать события от пользователя CGL::MainLoop(); } catch(...) { fprintf(stderr,"A error detected.\n"); } return 0; } void OnRender(void) { //Единичная матрица уже загружена (CGL автоматически загружает её, //перед тем, как передать управление сюда) glTranslatef(0.0f,0.0f,-10.0f); CGL::SetPointLight(GL_LIGHT0,CGLVector3(0.0f,2.0f,0.0f),CGLColor(1.0f,1.0f,1.0f)); glRotatef(-90,0.0f,1.0f,0.0f); glRotatef(alpha,0.0f,1.0f,0.0f); //fr.Draw(); //glLoadIdentity(); glTranslatef(0.0,0.0,-5.0); glutSolidSphere(1.0,10,10); } void OnSpecialKey(GLint p_nKey, GLint p_nx,GLint p_ny) { static float bs=0.0; bs+=0.1; switch (p_nKey) { case GLUT_KEY_F1: //По нажатию F1 меняем цвет фона glClearColor(bs,1.0f,1.0f,1.0f); break; case 'a': case 'A': //Сюда никогда не попадём, поскольку обрабатываем только спец кнопки glClearColor(0.0,0.0,0.0,0.0); break; } } void OnTimer(GLint value) { alpha-=10.1f; if (alpha<=0.0f) alpha=360.0f; } void OnEndEdit(const string& p_strEnterText) { cout<<"End of typing: "<<p_strEnterText.data()<<"\n"; } void OnChoose(const string& p_strChoose) { cout<<"Your choose: "<<p_strChoose.data()<<endl; } |
В современных реалиях эта библиотека, конечно, уже архаизм и пользы от неё никакой, но в те годы я все лабораторные по OpenGL с её помощью делал.
Файлы:
Скачать исходники CGL ZIP-архив (93 КБ)
Скачать CGL для Visual Studio 2008. ZIP-архив 1 МБ.