}

// выводим квадратичный объект gluPartialDisk(obj,ri,ro,si,st,sa, swa);

// уничтожаем квадратичный объект gluDeleteQuadric(obj) ;

}

void Models::gludisk(GLdouble ro,GLdouble ri,int si,int st)

{

GLUquadricObj *obj=gluNewQuadric(); gluQuadricNormals(obj,GLU_SMOOTH); gluQuadricTexture(obj,1); if(ro<0)

{

gluQuadricOrientation(obj,GLU_INSIDE); ro=-ro; ri=-ri;

}

gluDisk(obj,ri, ro, si, st) ; gluDeleteQuadric(obj) ;

}

void Models::gluconus(GLdouble rb,GLdouble h,

GLdouble ru,int si,int st)

{

GLUquadricObj *obj=gluNewQuadric(); gluQuadricNormals(obj,GLU_SMOOTH); gluQuadricTexture(obj,1); if(rb<0) t

gluQuadricOrientation(obj,GLU_INSIDE); rb=-rb; ru=-ru;

}

gluCylinder(obj,rb, ru, h, si, st) ; gluDeleteQuadric(obj);

}

void Models::glucylinder(GLdouble r,GLdouble h,

int si,int st)

{

GLUquadricObj *obj=gluNewQuadric() ; gluQuadricNormals(obj,GLU_SMOOTH); gluQuadricTexture(obj , 1) ; if(r<0)

{

gluQuadricOrientation(obj,GLU_INSIDE); r=-r ;

}

gluCylinder(obj,r,r,h,sl,st) ; gluDeleteQuadric(obj);

}

void Models::glusphere(GLdouble r,int si,int st) {

GLUquadricObj *obj=gluNewQuadric() ; gluQuadricNormals(obj,GLU_SMOOTH) ; gluQuadricTexture(obj , 1) ; if(r<0)

{

gluQuadricOrientation(obj , GLU_INSIDE) ; r=-r;

}

gluSphere(obj,r,si,st); gluDeleteQuadric(obj) ;

}

#endif

Файл globj.h

В классе GLobj представлен один из способов реализации камеры. Функции члены класса позволяют связать с камерой модель, источник света и спроецировать тень на указанную плоскость.

ttifndef _GLobj_

#define _GLobj_ struct GLobj

{

Vertex pos;

Vertex dir; // вектор направления движения Vertex look; // углы поворота взгляда

float da; // величина изменения поворота float ds; // величина изменения движения

// конструктор

GLobj(float _ds=0.8,float _da=0.5)

{

init(_ds,_da); pos.set(0,0,0); dir.set(0,0,0); look.set(0,0,0);

}

// инициализация

void init(float _ds=l,float _da=0.5)

{da=_da; ds=_ds;}

// позиционирование камеры

void position(float x=0,float y=0,float z=0) {pos.set(-x,-y,- z);}

// установка направления движения камеры void direction(float x=0,float y=0,float z=0) {dir.set(x,y,z);}

// установка направления взгляда камеры void looking(float x=0,float y=0,float z=0)

{look.set(x,y,z);}

// движение камеры вперед/назад void movefb(float steps=l)

{pos.move(ds*steps,dir.x,dir.y);}

// движение влево/вправо боком void movelr(float steps=l)

{pos.move(ds*steps,0,dir.y-90) ; }

// движение вверх/вниз void moveud(float steps=l)

{pos.move(ds*steps,dir.x+90, dir.y) ; }

// изменение направления движения влево/вправо void dirlr(float steps=l) {dir.y+=steps*da;}

// изменение направления движения вверх/вниз void dirud(float steps=l) {dir.x+=steps*da;}

// изменение направления взгляда влево/вправо void looklr(float steps) {look.y+=steps*da;}

// изменение направления взгляда вверх/вниз void lookud(float steps) {look.x+=steps*da;}

// преобразование в координаты камеры void transform(int i=l)

{

glRotatef(dir.x, 1, 0,0) ; і і і і ) g IRotatef (lo . х, 1, 0, 0) ; glRotatef(dir.у,0,1,0); if(i)glRotatef(look.у, 1, 0, 0) ; glTranslatef(pos.x,pos.y,pos.z-0.00 05);

}

// обратное преобразование для позиционирования void btransform(int i=l)


⇐ вернуться назад | | далее ⇒