WOJSKOWA AKADEMIA TECHNICZNA

LABORATORIUM GRAFIKA KOMPUTEROWA

SPRAWOZDANIE:

Laboratorium 3 – modelowanie obiektów za pomocą prymitywów Przestrzennych

PROWADZADZĄCY:

dr inż. Marek Salamon

WYKONAŁ:

Mateusz Faustman I7X1N1

DATA:

06.02.2009

1. Treść zadania:

Zadanie polegało na napisaniu programu który przy pomocy biblioteki GLUT narysuje lampę stworzoną z prymitywów. Użytkownik za pomocą klawiatury powinien mieć możliwość wprowadzenia zmian następujących parametrów:

a) Zmiana wysokości lampy pod – odchylenie w górę +60 stopni, odchylenie w dół -30 stopni b) Obrót ramienia lampy

W programie należało uwzględnić możliwość interakcyjnej zmiany położenia obserwatora poprzez

podanie następujących parametrów:

a) Odległości obserwatora od obiektu

b) Orientacji obserwatora w zakresie [0, 360] stopni względem osi OX OY i OZ.

2) Kod funkcji realizujących zadanie wraz z opisem void RysujLampke()

{

glClearColor(0,0,0,0) ;

glBegin(GL_LINES);

uklad(ukl);

glEnd();

glPushMatrix();

// podstawa

glPushMatrix();

GLUquadricObj *trzon;

Tworzy obiekt Quadric

trzon=gluNewQuadric();

glColor3f(255,255,255);

Ustawia kolor na czarny

glTranslatef(0.0,0.5,0.0);

Zaczyna rysowanie w pkt 0;0,5;0

glRotatef(90.0,1,0,0);

Obrót o 90 stopni względem osi X

gluCylinder(trzon,2.5,2.5,0.5,20,15);

Tworzy cylinder o promieniu 5

gluDisk(trzon,0,2.5,20,15);

Tworzy górną podstawę

glTranslatef(0,0,0.5);

gluDisk(trzon,0,2.5,20,15);

Tworzy dolną podstawę

gluDeleteQuadric(trzon);

glPopMatrix();

//pozioma

glPushMatrix();

glColor3f(255,255,255);

Ustawia kolor na czarny

glTranslatef(0,3,0);

Zaczyna rysowanie w pkt 0;3;0

glScalef(1,10,1);

glRotatef(obr_w_prawo,0,1,0);

Obraca zgodnie zwartością parametru obr_w_prawo glutWireCube(0.5);

Tworzy sześcian o boku 0,5

glPopMatrix();

//pionowa

glPushMatrix();

glRotatef(obr_w_prawo,0,1,0);

Obraca zgodnie z aktualną wartością parametru obr_w_prawo glTranslatef(0,5,0);

Przemieszcza obiekt o 5 jednostek po osi Y

glRotated(obr_w_lewo,0,0,1);

Obraca zgodnie z aktualną wartością parametru obr_w_lewo glTranslatef(-1.5,0,0.5);

Przemieszcza obiekt o -1,5X, 0Y, 0,5Z

glPushMatrix();

glScalef(20,1,1);

Skaluje w x,y,z

glutWireCube(0.25);

Tworzy sześcian o boku 025

glPopMatrix();

//uchwyt

glPushMatrix();

Tworzy obiekt

GLUquadricObj *uchwyt;

uchwyt

uchwyt=gluNewQuadric();

Ustawia kolor na czarny

glColor3f(255,255,255);

glTranslatef(-2.75,0.5,0.0);

Zaczyna rysowanie w pkt -2,7;0,5;0

glRotatef(90,1,0,0);

Obrót o 90 stopni względem osi X

gluCylinder(uchwyt,0.25,0.25,1.0,20,15);

Tworzy cylinder

gluDisk(trzon,0,0.25,20,15);

Tworzy pokrywe górną cylindra

gluDeleteQuadric(uchwyt);

usuwa obiekt uchwyt

glPopMatrix();

// abazur

glPushMatrix();

GLUquadricObj *abazur;

Tworzy obiekt abazur

abazur=gluNewQuadric();

glColor3f(255,255,255);

Ustawia kolor na czarny

glTranslatef(-2.75,-0.5,0.0);

Zaczyna rysowanie w pkt -2,7;0,5;0

glRotatef(90.0,1,0,0);

Obrót o 90 stopni względem osi X

gluCylinder(abazur,0.5,1.0,1.0,20,15);

Tworzy cylinder o górnej podstawie 0,5 i dolnej 1

gluDisk(trzon,0,0.5,20,15);

Tworzy górną podstawę cylindra

gluDeleteQuadric(abazur);

która jest jednocześnie dolna podstawa uchwytu glPopMatrix();

glPopMatrix();

glPopMatrix();

}

void ObslugaKlawiatury(unsigned char klawisz, int x, int y)

{

switch (klawisz)

{

case 'x' : OBSERWATOR_OBROT_X ++; break;

case 'X' : OBSERWATOR_OBROT_X --; break;

case 'y' : OBSERWATOR_OBROT_Y ++; break;

case 'Y' : OBSERWATOR_OBROT_Y --; break;

case 'z' : OBSERWATOR_OBROT_Z ++; break;

case 'Z' : OBSERWATOR_OBROT_Z --; break;

case 'o' : OBSERWATOR_ODLEGLOSC ++; break;

case 'O' : OBSERWATOR_ODLEGLOSC --; break;

case 'r' : obr_w_prawo++; break;

case 'l' : obr_w_prawo--; break;

case 'd' : if(obr_w_lewo<30)obr_w_lewo++; break; case 'g' : if(obr_w_lewo>-60)obr_w_lewo--; break; case 'u' : if(ukl==1)ukl=0;else ukl=1;break;

case 27 : exit(0); break; //esc

3)Wnioski:

Podczas tego laboratorium zapoznaliśmy się z modelowaniem bardziej skomplikowanych obiektów niż na poprzednich laboratoriach. Tym razem wykorzystaliśmy prymitywy przestrzenne dostępne w bibliotekach GLU oraz GLUT co zdecydowanie ułatwia modelowanie takich obiektów w porównaniu do metod wykorzystywanych na poprzednim laboratorium. Dzięki prymitywom nie trzeba już kodować funkcji odpowiedzialnych za narysowanie figury, wystarczy podać parametry i położenie.