Введение в OpenGL

Тут можно читать онлайн Введение в OpenGL - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.

Введение в OpenGL краткое содержание

Введение в OpenGL - описание и краткое содержание, автор Неизвестный Автор, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Введение в OpenGL - читать онлайн бесплатно полную версию (весь текст целиком)

Введение в OpenGL - читать книгу онлайн бесплатно, автор Неизвестный Автор
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Создание приложения в среде Borland C++ 5.02

Как и для Visual C++, сначала надо обеспечить наличие файлов glut.h, glut32.lib, glut32.dll в каталогах…\BorlandC\Include\Gl,…\BorlandC\Lib,…\Windows\System соответственно. Также в этих каталогах надо проверить наличие файлов gl.h, glu.h, opengl32.lib, glu32.lib, opengl32.dll, glu32.dll, которые обычно входят в состав BorlandC++ и Windows. При этом надо учитывать, что версии Microsoft файлов opengl32.lib, glu32.lib, glut32.lib для Borland C++ не подходят и следует использовать только совместимые версии. Чтобы создать такие версии, надо использовать стандартную программу ‘implib, которая находится в каталоге…\BorlandC\Bin. Для этого надо выполнить команды вида implib…\BorlandC\Lib\filename.lib…\filename.dll для перечисленных файлов, которые создают нужный *.lib файл из соответствующего *.dll файла. Кроме того, надо отметить, что компилятор BorlandC не может по неизвестным причинам использовать файл glaux.lib, входящий в состав BorlandC++5.02, при компиляции приложения, использующего библиотеку GLAUX, поэтому возможно от этой библиотеки придется отказаться. Для создания приложения надо выполнить следующие действия:

• Создание проекта: для этого надо выбрать Project→New Project и заполнить поля в окне Target Expert следующим образом: в поле Platform выбрать Win32,в поле Taget Model выбрать Сonsole , нажать Advanced и отменить выбор пунктов *.rc и *.def.

• Подключить к проекту библиотеки OpenGL. Для этого надо выбрать в окне проекта название исполняемого файла проекта (*.exe) и нажав правую кнопку мыши выбрать в контекстном меню пункт Add node . Затем надо определить положение файлов opengl32.lib, glu32.lib, glut32.lib.

• Для компиляции выбрать Project→Build All , для выполнения Debug-›Run .

Пример программы

Результатом выполнения этой программы является построение тетраэдра с вращающимися вокруг него кольцами, на которые нанесена текстура. В среде MS Visual C++ программа может компилироваться без изменений, а при компиляции в Borland C++ придется закомментировать вызов и описание функции TextureInit(), после чего не будет проводиться наложение текстур. Как было сказано выше, попытка использовать функции из библиотеки GLAUX приводит к сообщению об ошибке при компиляции программы.

При компиляции программы в MS Visual C++ файл ‘texture.bmp’ надо поместить в каталог проекта или указать полный путь к нему, используя символ ‘/’. Если путь не указан, то при запуске исполняемого файла из операционной системы, файл с текстурой должен находиться в том же каталоге.

#include

#include

#include

#define TETR_LIST 1

GLfloat light_col[] = {1,1,1};

float mat_diff1[]={0.8,0.8,0.8};

float mat_diff2[]={0.0,0.0,0.9};

float mat_amb[]= {0.2,0.2,0.2};

float mat_spec[]={0.6,0.6,0.6};

float shininess=0.7*128, CurAng=0, RingRad=1, RingHeight=0.1;

GLUquadricObj* QuadrObj;

GLuint TexId;

GLfloat TetrVertex[4][3], TetrNormal[4][3];

//--Вычисление нормали к плоскости, задаваемой точками a,b,c----------//

void getnorm (float a[3],float b[3],float c[3],float *n) {

float mult=0;

n[0]=(b[1]-a[1])*(c[2]-a[2])-(b[2]-a[2])*(c[1]-a[1]);

n[1]=(c[0]-a[0])*(b[2]-a[2])-(b[0]-a[0])*(c[2]-a[2]);

n[2]=(b[0]-a[0])*(c[1]-a[1])-(c[0]-a[0])*(b[1]-a[1]);

//--Определение нужного направления нормали: от точки (0,0,0)---------//

for (int i=0;i<3;i++) mult+=a[i]*n[i];

if (mult<0) for (int j=0;j<3;j++) n[j]=-n[j];

}

//--Вычисление координат вершин тетраэдра-----------------------------//

void InitVertexTetr() {

float alpha=0;

TetrVertex[0][0]=0;TetrVertex[0][1]=1.3;TetrVertex[0][2]=0;

//--Вычисление координат основания тетраэдра--------------------------//

for (int i=1;i<4;i++) {

TetrVertex[i][0]=0.94*cos(alpha);

TetrVertex[i][1]=0;

TetrVertex[i][2]=0.94*sin(alpha);

alpha+=120.0*3.14/180.0;

}

}

//--Вычисление нормалей сторон тетраэдра------------------------------//

void InitNormsTetr() {

getnorm(TetrVertex[0],TetrVertex[1],TetrVertex[2],TetrNormal[0]);

getnorm(TetrVertex[0],TetrVertex[2],TetrVertex[3],TetrNormal[1]);

getnorm(TetrVertex[0],TetrVertex[3],TetrVertex[1],TetrNormal[2]);

getnorm(TetrVertex[1],TetrVertex[2],TetrVertex[3],TetrNormal[3]);

}

//--Создание списка построения тетраэдра------------------------------//

void MakeTetrList() {

glNewList (TETR_LIST,GL_COMPILE);

//--Задание сторон тетраэдра------------------------------------------//

glBegin(GL_TRIANGLES);

for (int i=1;i<4;i++) {

glNormal3fv(TetrNormal[i-1]);

glVertex3fv(TetrVertex[0]);

glVertex3fv(TetrVertex[i]);

if (i!=3) glVertex3fv(TetrVertex[i+1]);

else glVertex3fv(TetrVertex[1]);

}

glNormal3fv(TetrNormal[3]);

glVertex3fv(TetrVertex[1]);

glVertex3fv(TetrVertex[2]);

glVertex3fv(TetrVertex[3]);

glEnd();

glEndList();

}

void DrawRing() {

//--Построение цилиндра (кольца), расположенного параллельно оси z----//

//--Второй и третий параметры задают радиусы оснований, четвертый-----//

//--высоту,последние два-число разбиений вокруг и вдоль оси z---------//

//--При этом дальнее основание цилиндра находится в плоскости z=0-----//

gluCylinder(QuadrObj,RingRad,RingRad,RingHeight,30,2);

}

void TextureInit() {

char strFile[]="texture.bmp";

//--Выравнивание в *.bmp по байту-------------------------------------//

glPixelStorei(GL_UNPACK_ALIGNMENT,1);

//--Создание идентификатора для текстуры- ----------------------------//

glGenTextures(1,&TexId);

//--Загрузка изображения в память-------------------------------------//

AUX_RGBImageRec *pImage = auxDIBImageLoad(strFile);

int BmpWidth= pImage->sizeX;

int BmpHeight = pImage->sizeY;

void* BmpBits = pImage->data;

//--Начало описания свойств текстуры----------------------------------//

glBindTexture (GL_TEXTURE_2D,TexId);

//--Создание уровней детализации и инициализация текстуры ------------//

gluBuild2DMipmaps(GL_TEXTURE_2D,3,BmpWidth, BmpHeight,GL_RGB,GL_UNSIGNED_BYTE,BmpBits);

//--Разрешение наложения этой текстуры на quadric-объекты-------------//

gluQuadricTexture(QuadrObj, GL_TRUE);

//--Задание параметров текстуры---------------------------------------//

//--Повтор изображения по параметрическим осям s и t------------------//

glTexParameteri (GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);

glTexParameteri (GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);

//--Не использовать интерполяцию при выборе точки на текстуре---------//

glTexParameteri (GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);

glTexParameteri (GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);

//--Совмещать текстуру и материал объекта-----------------------------//

glTexEnvi (GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);

}

void Init(void) {

InitVertexTetr();

InitNormsTetr();

MakeTetrList();

//--Определение свойств материала-------------------------------------//

glMaterialfv (GL_FRONT_AND_BACK,GL_AMBIENT,mat_amb);

glMaterialfv (GL_FRONT_AND_BACK,GL_SPECULAR,mat_spec);

glMaterialf(GL_FRONT,GL_SHININESS,shininess);

//--Определение свойств освещения-------------------------------------//

glLightfv(GL_LIGHT0, GL_DIFFUSE, light_col);

glEnable(GL_LIGHTING);

glEnable(GL_LIGHT0);

//--Проводить удаление невидимых линий и поверхностей-----------------//

glEnable(GL_DEPTH_TEST);

//--Проводить нормирование нормалей-----------------------------------//

glEnable(GL_NORMALIZE);

//--Материалы объектов отличаются только цветом диффузного отражения--//

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Неизвестный Автор читать все книги автора по порядку

Неизвестный Автор - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Введение в OpenGL отзывы


Отзывы читателей о книге Введение в OpenGL, автор: Неизвестный Автор. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x