Введение в OpenGL - [12]

Шрифт
Интервал

При компиляции программы в 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);

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

> glEnable(GL_COLOR_MATERIAL);


Еще от автора Неизвестный Автор
Галчонок

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Призраки ночи

В книге собраны предания и поверья о призраках ночи — колдунах и ведьмах, оборотнях и вампирах, один вид которых вызывал неподдельный страх, леденивший даже мужественное сердце.


Закат  вечности

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


mmmavro.org | День 131, Победа

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


mmmavro.org | День 132, Поэт

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Песнь о Нибелунгах

…«Песнь о Нибелунгах» принадлежит к числу наиболее известных эпических произведений человечества. Она находится в кругу таких творений, как поэмы Гомера и «Песнь о Роланде», «Слово о полку Игореве» и «Божественная комедия» Данте — если оставаться в пределе европейских литератур…В. Г. Адмони.


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Симуляция частичной специализации

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.