Мегаобучалка Главная | О нас | Обратная связь


Изобразите радугу состоящую из полигонов, которая освещается прожектором. Направление света прожектора постоянно меняется и скользит вдоль радуги



2019-07-03 206 Обсуждений (0)
Изобразите радугу состоящую из полигонов, которая освещается прожектором. Направление света прожектора постоянно меняется и скользит вдоль радуги 0.00 из 5.00 0 оценок




 

Решение :

 

#include <windows.h>

#include <GL/gl.h>

#include <GL/glu.h>

#include <GL/glaux.h>

 

#include<time.h>

 

#include <stdio.h>

#include <iostream.h>

#include <conio.h>

#include <math.h>

 

int flag=1;

 

void CALLBACK resize (int width, int height)

{

 

glViewport (0,0,width, height);

glMatrixMode (GL_PROJECTION);

glLoadIdentity();

//glOrtho(-20,20,-15,15, -10,25);

glOrtho(-6,6,-6,6, -20,20);

gluLookAt(1,-1,1, 0,0,0, 0,0,1);

//gluLookAt(0,-5,0, 0,0,0, 0,0,1);

glMatrixMode(GL_MODELVIEW);

 

}

 

void CALLBACK Draw (void)

{

static double time=0;

 

GLUquadricObj *quadObj;

quadObj = gluNewQuadric();

 

glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

 

glPushMatrix();

 

float x=time/100-2.2;

float z=pow((pow(2.4,2)-pow(x,2)),0.5);

 

if (x>2.2 && flag==1)

{

flag=2;

}

 

if (x<-2.2 && flag==2)

{

flag=1;

}

 

if (flag==2)

{

time--;

}

else

{

time++;

}

 

float dir[3]={x,0.1,z};

float pos[4]={0,-1,0,1};

 

 // включение нулевой лампы

GLfloat light_diffuse[]={3.0,3.0,3.0,1.0};

glLightfv(GL_LIGHT0,GL_DIFFUSE, light_diffuse);

 

glLightfv(GL_LIGHT0, GL_POSITION, pos);

glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, dir);

glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 90);

glLightf(GL_LIGHT0, GL_SPOT_EXPONENT, 9);

glEnable(GL_LIGHTING);

glEnable (GL_LIGHT0);        

glEnable (GL_DEPTH_TEST);

 

glPopMatrix();

 

glPushMatrix();

 

glRotated(90,1,0,0);

gluQuadricDrawStyle(quadObj, GLU_FILL);

// К

glColor3ub(255, 0, 0);

gluPartialDisk(quadObj, 2, 2.2, 30, 30, -90, 180);

// О

glColor3ub(255, 125, 0);

gluPartialDisk(quadObj, 2.2, 2.4, 30, 30, -90, 180);

// Ж

glColor3ub(255, 255, 0);

gluPartialDisk(quadObj, 2.4, 2.6, 30, 30, -90, 180);

// З

glColor3ub(0, 255, 0);

gluPartialDisk(quadObj, 2.6, 2.8, 30, 30, -90, 180);

// Г

glColor3ub(0, 255, 255);

gluPartialDisk(quadObj, 2.8, 3, 30, 30, -90, 180);

// С

glColor3ub(0, 0, 255);

gluPartialDisk(quadObj, 3, 3.2, 30, 30, -90, 180);

// Ф

glColor3ub(255, 0, 255);

gluPartialDisk(quadObj, 3.2, 3.4, 30, 30, -90, 180);

 

glPopMatrix();

 

glDisable(GL_LIGHTING);

 

auxSwapBuffers();

}

 

void main ()

{

auxInitPosition (100,100,800,800);

auxInitDisplayMode (AUX_RGB | AUX_DEPTH | AUX_DOUBLE);

auxInitWindow ("v11_06");

glTranslated(3,-3,2);

glEnable (GL_COLOR_MATERIAL); // установка свойств материала

auxIdleFunc (Draw);

auxReshapeFunc (resize);

auxMainLoop(Draw);

}

 

Результат:


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

 

Решение

 

#include <windows.h>

#include <GL/gl.h>

#include <GL/glu.h>

#include <GL/glaux.h>

 

#include<time.h>

 

#include <stdio.h>

#include <iostream.h>

#include <conio.h>

#include <math.h>

 

int flag0=1;

int flag1=1;

int flag2=1;

int flag3=1;

 

unsigned int image1_ID;

AUX_RGBImageRec* image1;

 

void CALLBACK resize (int width, int height)

{

glViewport (0,0,width, height);

glMatrixMode (GL_PROJECTION);

glLoadIdentity();

glOrtho(-6,6,-6,6, -20,20);

gluLookAt(1,-1,1, 0,0,0, 0,0,1);

glMatrixMode(GL_MODELVIEW);

 

}

 

void CALLBACK Draw (void)

{

static double time0=0;

static double time1=0;

static double time2=0;

static double time3=0;

 

GLUquadricObj *quadObj;

 

glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

 

glColor3d(1,1,1);

 

float pos[4]={3,-3,5,1};

glLightfv(GL_LIGHT0, GL_POSITION, pos);

glEnable(GL_LIGHTING);

glEnable (GL_LIGHT0);        

glEnable (GL_DEPTH_TEST);

 

quadObj = gluNewQuadric();

 

float s=0.9-(time0/800);

if (s<0.01 && flag0==1)

{flag0=2;}

if (s>0.9 && flag0==2)

{flag0=1;}

if (flag0==1)

{time0++;}

else

{time0--;}

 

const float p[4]={0,0,s,0};

 

glPushMatrix();

 

glEnable(GL_TEXTURE_2D);

glEnable(GL_TEXTURE_GEN_S);

glEnable(GL_TEXTURE_GEN_T);

 

glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);

glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);

glTexGenfv(GL_T,GL_OBJECT_PLANE,p);

 

glRotated(-180,1,0,0);

glTranslated(0,0,-3);

glColor3d(1,1,0);

gluCylinder(quadObj, 1, 1, 3, 50, 50);

 

glDisable(GL_TEXTURE_GEN_S);

glDisable(GL_TEXTURE_2D);

 

glPopMatrix();

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

 

glPushMatrix();

glEnable(GL_ALPHA_TEST);

glEnable(GL_BLEND);

double z1=time1/300;

glRotated(time1,0,0,1);

glTranslated(1.3,0,1);

glTranslated(0,0,z1);

if (z1>2 && flag1==1)

{flag1=2;}

if (z1<-1 && flag1==2)

{flag1=1;}

glColor4d(0,1,0, 0.1);

auxSolidSphere(0.2); //s1

glDisable(GL_BLEND);

glDisable(GL_ALPHA_TEST);

if (flag1==1)

{time1++;}

else

{time1--;}

glPopMatrix();

 

glPushMatrix();

glEnable(GL_ALPHA_TEST);

glEnable(GL_BLEND);

double z2=time2/600;

glRotated(time2*2,0,0,15);

glTranslated(1.8,0,1);

glTranslated(0,0,z2);

if (z2>2 && flag2==1)

{flag2=2;}

if (z2<-1 && flag2==2)

{flag2=1;}

glColor4d(1,0,0, 0.1);

auxSolidSphere(0.2); //s2

glDisable(GL_BLEND);

glDisable(GL_ALPHA_TEST);

if (flag2==1)

{time2++;}

else

{time2--;}

glPopMatrix();

 

glPushMatrix();

glEnable(GL_ALPHA_TEST);

glEnable(GL_BLEND);

double z3=time3/400;

glRotated(time3*3,0,0,1);

glTranslated(2.3,0,1);

glTranslated(0,0,z3);

if (z3>2 && flag3==1)

{flag3=2;}

if (z3<-1 && flag3==2)

{flag3=1;}

glColor4d(0,0,1, 0.2);

auxSolidSphere(0.2); //s3

glDisable(GL_BLEND);

glDisable(GL_ALPHA_TEST);

if (flag3==1)

{time3++;}

else

{time3--;}

glPopMatrix();

 

gluDeleteQuadric(quadObj);

auxSwapBuffers();

 

}

 

void main ()

{

 

auxInitPosition (100,100,800,800);

auxInitDisplayMode (AUX_RGB | AUX_DEPTH | AUX_DOUBLE);

auxInitWindow ("v11_07");

glTranslated(0,0,-1);

 

glEnable (GL_COLOR_MATERIAL); // установка свойств материала

image1 = auxDIBImageLoad("v11_07.bmp");

 

glGenTextures(1, &image1_ID);

glBindTexture(GL_TEXTURE_2D, image1_ID);

 

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

 

glTexImage2D(GL_TEXTURE_2D, 0, 3,

 image1->sizeX,

               image1->sizeY,

               0, GL_RGB, GL_UNSIGNED_BYTE,

               image1->data);

 

auxIdleFunc (Draw);

auxReshapeFunc (resize);

auxMainLoop(Draw);

}

 

Результат:



2019-07-03 206 Обсуждений (0)
Изобразите радугу состоящую из полигонов, которая освещается прожектором. Направление света прожектора постоянно меняется и скользит вдоль радуги 0.00 из 5.00 0 оценок









Обсуждение в статье: Изобразите радугу состоящую из полигонов, которая освещается прожектором. Направление света прожектора постоянно меняется и скользит вдоль радуги

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...
Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе...
Как построить свою речь (словесное оформление): При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою...
Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (206)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.006 сек.)