Читаем Введение в OpenGL полностью

Результатом выполнения этой программы является построение тетраэдра с вращающимися вокруг него кольцами, на которые нанесена текстура. В среде 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() {

Перейти на страницу:

Похожие книги

Adobe InDesign CS3
Adobe InDesign CS3

Книга посвящена верстке и макетированию в программе Adobe InDesign CS3. Помимо того что в ней описываются возможности программы, рассматриваются также принципы и традиции верстки, приводятся примеры решения типичных задач. Все это позволит читателю не только овладеть богатым инструментарием программы, но и грамотно применять его.Материал книги разделен на логические части: теоретические сведения, инструментарий программы, решение задач, – а также рассчитан на два уровня подготовки читателей – начинающих и опытных пользователей, что выгодно отличает книгу от других изданий. Это позволит применять ее как новичкам для знакомства с программой, так и пользователям со стажем для пополнения своих знаний.

Владимир Гавриилович Завгородний , Владимир Завгородний

Программирование, программы, базы данных / Программное обеспечение / Книги по IT
Программирование. Принципы и практика использования C++ Исправленное издание
Программирование. Принципы и практика использования C++ Исправленное издание

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова

Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT