На страницу "Другое"

CGL (библиотека для работы с OpenGL)

CGL - библиотека для C++. Очень сильно облегчает инициализацию. Позволяет добавлять графические элементы управления (кнопки, ползунки, текстовые окна, списки). Вам нужно написать лабораторную работу по компьютерной графике? Но вы не знаете как инициализировать 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 - абсолютно законченный и рабочий проект. Вы используете его на свой страх и риск! Запрещается любое коммерческое использование CGL!

Как инициализировать OpenGL с помощью CGL

Всё очень просто! Просто посмотрите на код и вы всё поймёте!


////////////////////////////////////////////////////////////////////////////////
//Автор: Урванов Фёдор Владиславович
//e-mail: urvanovf@hotmail.ru
//сайт: http://www.dxgames.narod.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);
}



Добавление элементов управления (кнопок, слайдеров...)

Координатная сетка окна выглядит как показано на рисунке:
Координатная сетка CGL
Пространство окна, на которое вы помещаете элементы управления всегда имеет форму квадрата. Если окно вытянуто по горизонтали или по вертикали, то элементы управления размещаются в наибольшем квадрате, который помещается в это окно. При создании любого элемента управления первые четыре параметра - координаты и размеры окна. Первые два параметра - позиция левого верхнего угла элемента управления. Вторые два - его ширина и высота. При изменении размеров окна размеры элементов управления будут изменяться автоматически.


////////////////////////////////////////////////////////////////////////////////
//Автор: Урванов Фёдор Владиславович
//e-mail: urvanovf@hotmail.ru
//сайт: http://www.dxgames.narod.ru
////////////////////////////////////////////////////////////////////////////////

#include "cglstdafx.h"
#include "cgl.h"

#include 

//Объявляем прототипы
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 "<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: "<

Удачи вам:)