Paulina Kot I7X1N1 sprawozdanie Lampka, WAT, semestr III, Grafika komputerowa


WOJSKOWA AKADEMIA TECHNICZNA

0x01 graphic

SPRAWOZDANIE Z PRZEDMIOTU

Grafika Komputerowa

Laboratorium nr 3 „Przekształcenia geometryczne”

Prowadzący zajęcia:

dr inż. Marek Salamon

Słuchacz:

Paulina Kot

Grupa: I7X1N1

Treść zadania:

Napisać program przedstawiający obiekt zbudowany z prymitywów przestrzennych udostępnianych przez biblioteki GLU i GLUT. Użytkownik za pomocą klawiatury powinien mieć możliwość wprowadzenia zmian następujących parametrów:

W programie uwzględnić możliwość interakcyjnej zmiany położenia obserwatora poprzez podanie następujących parametrów:

UWAGA: Obserwator jest zawsze zwrócony przodem w kierunku obiektu.

Sposób rozwiązania zadania:

Projektowanie lampy rozpoczęłam od zainicjalizowania elementów składowych lampki zamodelowanych jako kwadrygi. Kolejno przedstawię te elementy:

podstawaS = gluNewQuadric();

gluQuadricDrawStyle(podstawaS, GLU_LINE);

podstawaDyskG = gluNewQuadric();

gluQuadricDrawStyle(podstawaDyskG, GLU_LINE);

podstawaDyskD = gluNewQuadric();

gluQuadricDrawStyle(podstawaDyskD, GLU_LINE);

czescKlosza = gluNewQuadric();

gluQuadricDrawStyle(czescKlosza, GLU_LINE);

czescDyskG = gluNewQuadric();

gluQuadricDrawStyle(czescDyskG, GLU_LINE);

czescDyskD = gluNewQuadric();

gluQuadricDrawStyle(czescDyskD, GLU_LINE);

klosz = gluNewQuadric();

gluQuadricDrawStyle(klosz, GLU_LINE);

kloszDyskG = gluNewQuadric();

gluQuadricDrawStyle(kloszDyskG, GLU_LINE);

wlacznik = gluNewQuadric();

gluQuadricDrawStyle(wlacznik, GLU_LINE);

Następnie przeszłam do tworzenia podstawy lampy używając funkcji gluCylinder(); oraz ustawiając jej odpowiednie parametry. Aby „zamknąć” powierzchnię podstawy wykorzystałam funkcję gluDisk();

Kod tworzenie podstawa lampki

glPushMatrix(); skopiowanie macierzy na wierzchołek stosu

glColor3f(1,0,0); ustawienie koloru (czerwony)

glRotatef(-90.0,1,0,0); rotacja o kat -90' ->zgodne z ruchem wskazówek zegara, wokół osi równoległej do wektora(x,y,z)->x

gluCylinder(podstawaS,2.5,2.5,0.5,20,4); Cylinder bez podstaw, wskaźnik do kwadryki, Rdolna2.5=Rgórnej, h=0.5, podziały

gluDisk(podstawaDyskD,0.0,2.5,20,4); dolna podstawa ->koło z wnętrzem otwartym, wskaźnik do kwadryki, R mniejszy, Rwiększy, podział i koncentracja

glTranslatef(0.0,0.0,0.5); translacja o wektor (x,y,z),z=0.5

gluDisk(podstawaDyskG,0.0,2.5,20,4); górna podstawa -> koło z wnętrzem otwartym, wskaźnik do kwadryki, R mniejszy, Rwiększy, podział i koncentracja

glPopMatrix(); zdjęcie macierzy z wierzchołka stosu

Kolejnym krokiem było utworzenie nóżki lampy. W tym wypadku należało najpierw odpowiednio zeskalować poprzez glScalef(0.5, 5.0, 0.5), oraz przesunąć a następnie wywołać ten sześcian funkcją gluSolidWire (1);

Kod tworzenie ramienia wspierającego (dolne)

glPushMatrix(); skopiowanie macierzy na wierzchołek stosu

glColor3f(1,0,0); ustawienie koloru (czerwony)

glTranslatef(0.0,3.0,0.0); translacja o wektor (x,y,z),y=3

glScalef(0.5,5.0,0.5); skalowanie wzdłuż osi (wymiary z zadania)

glutWireCube(1); wywołanie sześcianu

glPopMatrix(); zdjęcie macierzy z wierzchołka stosu

Kod rotacji ramienia, umieszczenie na miejsce (na górze)

glTranslatef(-0.5,5,0.0); translacja o wektor (x,y,z),x=-0.5,y=5

glRotatef(obrotRamienia1, 1, 0, 0); rotacja o kat

glRotatef(obrotLampki,0,1,0); rotacja o kat

Podobne przekształcenia przeprowadzam dla ramienia lampki

Kod tworzenie ramienia (górne)

glPushMatrix(); skopiowanie macierzy na wierzchołek stosu

glTranslatef(0.0,0.0,-2.0); translacja o wektor (x,y,z),z=-2.0

glScalef(0.25,0.25,5.0); skalowanie wzdłuż osi (wymiary z zadania)

glutWireCube(1); wywołanie sześcianu

glPopMatrix(); zdjęcie macierzy z wierzchołka stosu

Ostatnimi do zaprojektowania były już sama lampka z kloszem. Po przesunięciu na odpowiednie miejsca zostały wywołane dwa cylindry.

Kod górnej części klosza

glColor3f(1,0,0); ustawienie koloru (czerwony)

glPushMatrix(); skopiowanie macierzy na wierzchołek stosu

glRotatef(-90.0,1,0,0); rotacja o kat

glTranslatef(0.0,4.5,-0.5); translacja o wektor (x,y,z),y=4.5,z=-0.5

Cylinder bez podstaw, wskaźnik do kwadryki, Rdolna2.5=Rgórnej, h=1, podziały

gluCylinder(czescKlosza,0.25,0.25,1.0,20,4);

gluDisk(czescDyskD,0.0,0.25,20,4); dolna podstawa ->koło z wnętrzem otwartym, wskaźnik do kwadryki, R mniejszy, R większy, podział i koncentracja

glTranslatef(0.0,0.0,1.0); translacja o wektor (x,y,z),z=1.0

gluDisk(czescDyskG,0.0,0.25,20,4); górna podstawa ->koło z wnętrzem otwartym, wskaźnik do kwadryki, R mniejszy, R większy, podział i koncentracja

glPopMatrix(); zdjęcie macierzy z wierzchołka stosu

Kod klosza (główny)

glPushMatrix(); skopiowanie macierzy na wierzchołek stosu

glRotatef(-90.0,1,0,0); rotacja o kat

glTranslatef(0.0,4.5,-1.5); translacja o wektor (x,y,z),y=4.5,z=-1.5

Cylinder bez podstaw, wskaźnik do kwadryki, Rdolna2.5=Rgórnej, h=1, podziały

gluCylinder(klosz,1.0,0.5,1.0,20,4);

glTranslatef(0.0,0.0,1.0); translacja o wektor (x,y,z),y=1

gluDisk(kloszDyskG,0.0,0.5,20,4); górna podstawa ->koło z wnętrzem otwartym, wskaźnik do kwadryki, R mniejszy, R większy, podział i koncentracja

glPopMatrix(); zdjęcie macierzy z wierzchołka stosu

Poniżej przedstawiam printscrena z wynikami:

0x01 graphic

Poniżej przedstawiam obsługę klawiatury:

Kod źródłowy

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

{

switch(klawisz)

{

case '2':

rotRamienia1 = (rotRamienia1 < 45.0) ? rotRamienia1 + 1.0 : rotRamienia1;

break;

case '@':

rotRamienia1 = (rotRamienia1 > -15.0) ? rotRamienia1 - 1.0 : rotRamienia1;

break;

}

if(klawisz == 27)

exit(0);

}

Kod źródłowy (fragmęt)

case '+':

odleglosc = (odleglosc<100.0) ? odleglosc+1.0 : odleglosc;

break;

case '-':

odleglosc = (odleglosc/wysokosc>1.0) ? odleglosc-1.0 : odleglosc;

break;

Przedstawiam poniżej printscreen'y z wynikami

Obniżenie ramienia:

0x01 graphic

Podwyższenie ramienia:

0x01 graphic

Obserwator odległości „z dala”:

0x01 graphic

Obserwator odległości „z bliska”:

0x01 graphic

W następnym etapie należało uwzględnić w programie możliwość położenia obserwatora orientacji względem osi 0X, 0Y, 0Z. poniżej przedstawiam kod źródłowy (fragmęt) odpowiadający za zmianę obserwatora orientacji:

Kod źródłowy

void ObslugaKlawiszySpecjalnych(int klawisz, int x, int y)

{

switch(klawisz)

{

case GLUT_KEY_UP:

wysokosc = (wysokosc < odleglosc) ? wysokosc + 0.5 :wysokosc;

break;

case GLUT_KEY_DOWN:

wysokosc = (wysokosc > -180.0) ? wysokosc - 0.5 :wysokosc;

break;

case GLUT_KEY_LEFT:

rotObsY = (rotObsY > -180.0) ? rotObsY - 1.0 : rotObsY;

break;

case GLUT_KEY_RIGHT:

rotObsY = (rotObsY < 180.0) ? rotObsY + 1.0 : rotObsY;

break;

}

}

Wyniki przedstawiają printscreen'y:

Obserwator „z góry”

0x01 graphic

Obserwator „z dołu”

0x01 graphic

Obserwator „z lewego boku”

0x01 graphic

Obserwator „z prawego boku”

0x01 graphic



Wyszukiwarka

Podobne podstrony:
Kaiser lampka, WAT, semestr III, Grafika komputerowa
Zadania I7X1N1poprawkowe, WAT, semestr III, Grafika komputerowa
I Ćwiczenie 5, WAT, semestr III, Grafika komputerowa
I7X1S1 Loay Achmasiewicz, WAT, semestr III, Grafika komputerowa
I Ćwiczenie 6, WAT, semestr III, Grafika komputerowa
50, WAT, semestr III, Grafika komputerowa
Laboratorium3 PGK zadania, WAT, semestr III, Grafika komputerowa
Zadanie poprawkowe GK 2008, WAT, semestr III, Grafika komputerowa
gk cw1, WAT, semestr III, Grafika komputerowa
Ogolne, WAT, semestr III, Grafika komputerowa
gk efekty kody, WAT, semestr III, Grafika komputerowa
Zadania I7X, WAT, semestr III, Grafika komputerowa
I Ćwiczenia 4 zadania(na czysto), WAT, semestr III, Grafika komputerowa
Grupa I7X poprawkowe, WAT, semestr III, Grafika komputerowa
Laszuk kubek, WAT, semestr III, Grafika komputerowa
Laboratorium3 PGK zadania C02C, WAT, semestr III, Grafika komputerowa
Ciuchcia, WAT, semestr III, Grafika komputerowa
gk sprawko, WAT, semestr III, Grafika komputerowa

więcej podobnych podstron