1. Винт
Винт вентилятора составлен из трех основных частей
- Лопасть вентилятора
| |
где bFan – половина ширины лопасти в основании, lFan – длина лопасти, N – разбиение лопасти |
Фрагмент кода программы лопасти вентилятора
double bFan=5;
double lFan=15;
glBindTexture(GL_TEXTURE_2D,texture4);
float N=30;
float NNN=100;
int i=0;
while(i<N)
{
glBegin(GL_QUADS);
glTexCoord2d(i/N,0);
glNormal3f(-2*lFan*bFan*i/(N*N)*sin(i*M_PI/(1.5*N)), 2*bFan*bFan/(N*log(NNN))*(log(i+26)*i*sin(i*M_PI/(1.5*N))-log(i+25)*(i+1)*sin((i+1)*M_PI/(1.5*N))), 2*bFan*lFan*log(i+25)/(N*log(NNN)));
glVertex3f(-bFan*log(i+25)/log(NNN),lFan*i/N,-bFan*(i)/N*sin(i*M_PI/(N*1.5)));
glTexCoord2d(i/N,1);
glNormal3f(-2*lFan*bFan*i/(N*N)*sin(i*M_PI/(1.5*N)), 2*bFan*bFan/(N*log(NNN))*(log(i+26)*i*sin(i*M_PI/(1.5*N))-log(i+25)*(i+1)*sin((i+1)*M_PI/(1.5*N))),2*bFan*lFan*log(i+25)/(N*log(NNN)));
glVertex3f(bFan*log(i+25)/log(NNN),lFan*i/N,bFan*(i)/N*sin(i*M_PI/(N*1.5)));
glTexCoord2d((i+1.0)/N,1);
glNormal3f(-2*lFan*bFan*i/(N*N)*sin(i*M_PI/(1.5*N)), 2*bFan*bFan/(N*log(NNN))*(log(i+26)*i*sin(i*M_PI/(1.5*N))-log(i+25)*(i+1)*sin((i+1)*M_PI/(1.5*N))),2*bFan*lFan*log(i+25)/(N*log(NNN)));
glVertex3f(bFan*log((i+26))/log(NNN),lFan*(i+1)/N,bFan*(i+1)/N*sin((i+1)*M_PI/(N*1.5)));
glTexCoord2d((i+1.0)/N,0);
glNormal3f(-2*lFan*bFan*i/(N*N)*sin(i*M_PI/(1.5*N)), 2*bFan*bFan/(N*log(NNN))*(log(i+26)*i*sin(i*M_PI/(1.5*N))-log(i+25)*(i+1)*sin((i+1)*M_PI/(1.5*N))),2*bFan*lFan*log(i+25)/(N*log(NNN)));
glVertex3f(-bFan*log((i+26))/log(NNN),lFan*(i+1)/N, *(i+1)/N*sin((i+1)*M_PI/(N*1.5)));
glEnd();
i++;
}
- Цилиндр, объединяющий лопасти вентилятора в винт
| |
где M – разбиение цилиндра |
Фрагмент кода программы цилиндра, объединяющего лопасти вентилятора в винт
M=30;
int qRoll=0;
glBindTexture(GL_TEXTURE_2D,texture2);
while (qRoll<M)
{
glBegin(GL_QUADS);
glTexCoord2d(0,qRoll/M);
glNormal3f(0,sin((2*M_PI*qRoll)/M),cos((2*M_PI*qRoll)/M));
glVertex3f(-1,sin((2*M_PI*qRoll)/M),cos((2*M_PI*qRoll)/M));
glTexCoord2d(0,(qRoll+1.0)/M);
glNormal3f(0,sin((2*M_PI*(qRoll+1))/M),cos((2*M_PI*(qRoll+1))/M));
glVertex3f(-1,sin((2*M_PI*(qRoll+1))/M),cos((2*M_PI*(qRoll+1))/M));
glTexCoord2d(1,(qRoll+1.0)/M);
glNormal3f(0,sin((2*M_PI*(qRoll+1))/M),cos((2*M_PI*(qRoll+1))/M));
glVertex3f(1,sin((2*M_PI*(qRoll+1))/M),cos((2*M_PI*(qRoll+1))/M));
glTexCoord2d(1,qRoll/M);
glNormal3f(0,sin((2*M_PI*qRoll)/M),cos((2*M_PI*qRoll)/M));
glVertex3f(1,sin((2*M_PI*qRoll)/M),cos((2*M_PI*qRoll)/M));
glEnd();
qRoll++;
}
- Крышка на цилиндр
| |
где M – разбиение круга |
Фрагмент кода программы цилиндра, объединяющего лопасти вентилятора в винт
int M=30;
int qFan=0;
glBegin(GL_POLYGON);
while (qFan<M)
{
glNormal3f(1,0,0);
if(qFan<M/4)
{
glTexCoord2d(0,1-qFan*4/M);
}
if((qFan>=M/4)&&(qFan<M/2))
{
glTexCoord2d((qFan-M/4)*4/M,0);
}
if((qFan>=M/2)&&(qFan<3*M/4))
{
glTexCoord2d(1,(qFan-M/2)*4/M);
}
if(qFan>=3*M/4)
{
glTexCoord2d(1-(qFan-3*M/4)*4/M,1);
}
glVertex3f(1,sin((2*M_PI*qFan)/M),cos((2*M_PI*qFan)/M));
qFan++;
}
glEnd();
... . Аналогична поверхность редко бывает окрашена равномерно: чаще на ней бывает какой либо узор. Реалистичность изображения можно повысить путем нанесения узора на поверхность. Само перечисление способов построения реалистичных изображений говорит о том, какой большой объем работы необходимо проделать, чтобы получить что-нибудь, в самом деле, стоящее. И это было бы действительно так если бы не ...
... представляют собой числа с плавающей точкой. Наличие различных форматов позволяет библиотеке OpenGL принимать данные пользователя в его собственном формате данных. Некоторые команды библиотеки OpenGL допускают использование 8 различных типов данных в качестве своих параметров. Буквы, используемые в качестве суффиксов для того, чтобы определить эти типы данных для реализации ISO С библиотеки ...
... , комментарии в формате XML. Переняв многое от своих предшественников — языков С++, Delphi, Модула и Smalltalk — С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем: так, C# не поддерживает множественное наследование классов (в отличие от C++) или вывода типов (реализовано в .NET Framework 3.0). C# ...
... на другом или утверждения о реализации идеи человеко-машинного общения. Поэтому исследования в этой области являются весьма актуальными. 3. Разработка программного обеспечения для распознавания команд управления промышленным роботом 3.1 Реализация интерфейса записи и воспроизведения звукового сигнала в операционной системе Microsoft Windows 3.1.1 Основные сведения Звуковые данные хранятся ...
0 комментариев