2.  Стойка

Стойка вентилятора составлена из трех основных частей

-   Верхняя часть корпуса (полусфера)

   

где rFan – наибольший радиус в фигуре, iM, M – разбиения полусферы

Фрагмент кода программы верхней части корпуса (полусферы)

M=30;

int iM=30;

double phi, psi;

q=0;

int i=0;

while (q<M)

{

while (i<iM)

{

glBindTexture(GL_TEXTURE_2D, texture2);

glBegin(GL_QUADS);

phi=(-(M_PI*(i))/iM); psi=((M_PI*(q))/M);

glNormal3f(-3*rFan*sin(phi),rFan*cos(phi)*sin(psi),rFan*cos(phi)*cos(psi));

glTexCoord2d((sin(phi)+1)/2,(cos(psi)+1)/2);

glVertex3d(*rFan*sin(phi)+bFan,rFan*cos(phi)*sin(psi), rFan*cos(phi)*cos(psi));

phi=(-(M_PI*(i+1))/iM); psi=((M_PI*(q))/M);

 

glNormal3f(-3*rFan*sin(phi),rFan*cos(phi)*sin(psi),rFan*cos(phi)*cos(psi));

 glTexCoord2d((sin(phi)+1)/2,(cos(psi)+1)/2);

glVertex3d(*rFan*sin(phi)+bFan,rFan*cos(phi)*sin(psi), rFan*cos(phi)*cos(psi));

 phi=(-(M_PI*(i+1))/iM); psi=((M_PI*(q+1))/M);

 

glNormal3f(-3*rFan*sin(phi),rFan*cos(phi)*sin(psi),rFan*cos(phi)*cos(psi));

 glTexCoord2d((sin(phi)+1)/2,(cos(psi)+1)/2);

glVertex3d(*rFan*sin(phi)+bFan,rFan*cos(phi)*sin(psi), rFan*cos(phi)*cos(psi));

 phi=(-(M_PI*(i))/iM); psi=((M_PI*(q+1))/M);

 

glNormal3f(-3*rFan*sin(phi),rFan*cos(phi)*sin(psi),rFan*cos(phi)*cos(psi));

 glTexCoord2d((sin(phi)+1)/2,(cos(psi)+1)/2);

glVertex3d(*rFan*sin(phi)+bFan,rFan*cos(phi)*sin(psi), rFan*cos(phi)*cos(psi));

 glEnd();

 i++;

}

i=0;

q++;

}


-   Цилиндрический элемент стойки

Этот элемент стойки вентилятора состоит из цилиндров и кругов (крышки для цилиндров). Все они вызываются с помощью функции OpenGL – glCallList. Большая часть кода элементов вентилятора считывается программой лишь однажды, в СallLists, а вызов уже происходит неоднократно, по мере необходимости, в функции RenderGLScene(). Этот способ наиболее эффективен как для скорости работы программы, так и для редактирования готового кода программы, благодаря чему одинаковые примитивы (цилиндр, круг, квадрат, линии и т.д.) было легко использовать вызовом CallList и, применяя элементарные преобразования – поворот, перемещение, масштабирование объектов, видоизменять необходимым образом для получения данных элементов тела.

Элементы цилиндр и круг были описаны выше, поэтому не будем повторяться.

-   Ножка стойки

Этот элемент тела строится через функцию CallList, в которой задан квадрат, вызываемый 4 раза и масштабированный по разным координатам по разному.

Фрагмент кода программы ножек стойки вентилятора

//--- Квадрат

square=basis_leg+1;

glNewList(square,GL_COMPILE);

glBindTexture(GL_TEXTURE_2D,texture1);

glBegin(GL_QUADS);

 glNormal3f(1,0,0);

 glTexCoord2d(0,0);

 glVertex3f(1,-1,-1);

 glTexCoord2d(1,0);

 glVertex3f(1,1,-1);

 glTexCoord2d(1,1);

 glVertex3f(1,1,1);

 glTexCoord2d(0,1);

 glVertex3f(1,-1,1);

 glEnd();

glEndList();

//--- Ножка вентилятора

leg=square+1;

glNewList(leg,GL_COMPILE);

glCallList(square);

glRotatef(90,0,0,1);

 glCallList(square);

 glRotatef(90,0,0,1);

 glCallList(square);

 glRotatef(90,0,0,1);

 glCallList(square);

glEndList();



Информация о работе «Модель трехмерной сцены и библиотека OpenGL»
Раздел: Информатика, программирование
Количество знаков с пробелами: 14415
Количество таблиц: 13
Количество изображений: 16

Похожие работы

Скачать
27990
3
11

... . Аналогична поверхность редко бывает окрашена равномерно: чаще на ней бывает какой либо узор. Реалистичность изображения можно повысить путем нанесения узора на поверхность. Само перечисление способов построения реалистичных изображений говорит о том, какой большой объем работы необходимо проделать, чтобы получить что-нибудь, в самом деле, стоящее. И это было бы действительно так если бы не ...

Скачать
52592
2
3

... представляют собой числа с плавающей точкой. Наличие различных форматов позволяет библиотеке OpenGL принимать данные пользователя в его собственном формате данных. Некоторые команды библиотеки OpenGL допускают использование 8 различных типов данных в качестве своих параметров. Буквы, используемые в качестве суффиксов для того, чтобы определить эти типы данных для реализации ISO С библиотеки ...

Скачать
41796
0
8

... , комментарии в формате XML. Переняв многое от своих предшественников — языков С++, Delphi, Модула и Smalltalk — С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем: так, C# не поддерживает множественное наследование классов (в отличие от C++) или вывода типов (реализовано в .NET Framework 3.0). C# ...

Скачать
158991
11
10

... на другом или утверждения о реализации идеи человеко-машинного общения. Поэтому исследования в этой области являются весьма актуальными. 3. Разработка программного обеспечения для распознавания команд управления промышленным роботом 3.1 Реализация интерфейса записи и воспроизведения звукового сигнала в операционной системе Microsoft Windows 3.1.1 Основные сведения Звуковые данные хранятся ...

0 комментариев


Наверх