Złamański L4[1], WAT, semestr III, Grafika komputerowa

Poza tym na świecie jest niewiele istot groźniejszych od kobiety.

WOJSKOWA AKADEMIA TECHNICZNA
im Jarosława Dąbrowskiego
LABORATORIUM GRAFIKI KOMPUTEROWEJ
SPRAWOZDANIEZĆWICZENIA LABORATORYJNEGO NR 4.
SPRAWOZDANIEWYKONAŁ: TOMASZZŁAMAŃSKI
DATAWYKONANIAĆWICZENIA: 09.01.2009.
GRUPA:
I7X5S1
 1 Treść zadania:
WykorzystującbibliotekiOpenGLiGLUTnapisaćprogramprzedstawiającyperspektywiczny
obrazobiektuonastępującychparametrach
1. Typobiektuwalecozmiennejparzystejliczbiepodziałówpionowychipoziomych
2. Właściwościmateriału1brązowybłyszczący(widzianywbiałymświetle)
3. Właściwościmateriału2fioletowyemitujący(widzianywbiałymświetle)
4. Sposóbprzyporządkowywaniamateriałówdoobiektuzgodniezewzorempasypoziomez
uwzględnieniempodziałówpoziomych
Obiekt należyoświetlićdwomaźródłamiświatłaonastępującychparametrach
Źródłonr1

typ: reflektor (ang. spot),
• kolorźółty
• natężenie1
• kątodcięcia300
• położeniezmienne poorbicie kołowejo środku wpunkcie S(0 0 0)z możliwością
interaktywnejzmianynastępującychparametrów

promienia orbity,
• prędkościkątowej(3różneprędkości)
• kątanachyleniaorbitydoosiOX
• kierunekświecenianaobiekt
Źródłonr2

typ: kierunkowe,

kolor: niebieski,
• natężenie08
• położeniestałewpunkcieP(-10, -510)układuwspółrzędnychsceny
• kierunekświecenianaobiekt
Programpowinienumożliwiać
a) interaktywneniezależnewłączanieiwyłączanieźródełświatła
b) interaktywnązmianęliczbypodziałówpionowychipoziomychbryły
c) interaktywnązmianęwielkościbryły
- 2 -
d) interaktywnązmianępołożeniaobserwatorapoprzezpodanienastępującychparametrów
– odległościobserwatoraodśrodkaukładuwspółrzędnychsceny
– kątaobrotuwokółosiOYwzakresie003600zkrokiem10
Oświetlonyobiektpowinienzawszeznajdowaćsięwcentralnejczęściokna
- 3 -
2 Sposób wykonania zadania
Realizacjętreścizadaniarozpocząłemodzdefiniowaniaparametrówmateriałów
// Materialy
GLfloat material1[3][4] = { // brazowy blyszczacy
{ 0.8f, 0.3f, 0.3f, 1.0f }, // ambient
{ 0.0f, 0.0f, 0.0f, 1.0f }, // diffuse
{ 0.8f, 0.3f, 0.3f, 1.0f } // specular
};
GLfloat material2[4][4] = { // fioletowy emitujacy
{ 1.0f, 0.0f, 1.0f, 1.0f }, // ambient
{ 1.0f, 0.0f, 1.0f, 1.0f }, // diffuse
{ 1.0f, 0.0f, 1.0f, 1.0f }, // specular
{ 0.1f, 0.0f, 0.1f, 1.0f } // emission
};
Jakwidaćna powyższymlistingu całośćsprowadziła się do utworzenia dwóch tablic
dwuwymiarowychktórezawierająodpowiednioustawioneskładoweRGBAposzczególnych
parametrów
Składowe parametru
ambient
określają stopień odbicia światła otaczającego
parametru
diffuse
– stopieńrozproszeniaświatłarozproszonegoparametru
specular

stopieńodbiciaświatłaodbitegozaśskładoweRGBAparametru
emission
określająświatło
emitowaneprzezobiektTenostatniparametrdomyślniejestustawionytakżemateriałnie
jestemitującyDlategopierwszatablicaniezawieraustawieńtegoparametru
Dobraniepowyższychparametrówniejestzadaniemłatwymiprzysporzyłominieco
kłopotówjednakżeudałosięosiągnąćzadowalającyefektPrzyznajdowaniuustawieńdla
pierwszegomateriałukierowałemsięzasadąktóramówiżepowierzchniebłyszczące
powinnymiećmałeskładoweparametru
diffuse
zaśsporeparametru
specular
Materiał
drugiwymagałjedyniedobraniaodpowiednichwartościdlaparametru
emission
.
Następnymkrokiembyłonapisaniefunkcjiktórebędąkorzystałyzezdefiniowanych
materiałówwceluustawieniaichwodpowiednimmomenciemodelowaniaobiektuFunkcje
teprzedstawiająsięnastępująco
// Funkcja ustawiajaca material 1
void setMaterial1() {
glMaterialfv(GL_FRONT, GL_AMBIENT, material1[0]);
glMaterialfv(GL_FRONT, GL_DIFFUSE, material1[1]);
glMaterialfv(GL_FRONT, GL_SPECULAR, material1[2]);
glMaterialf(GL_FRONT, GL_SHININESS, 128.0f);
}
// Funkcja ustawiajaca material 2
void setMaterial2() {
glMaterialfv(GL_FRONT, GL_AMBIENT, material2[0]);
glMaterialfv(GL_FRONT, GL_DIFFUSE, material2[1]);
glMaterialfv(GL_FRONT, GL_SPECULAR, material2[2]);
glMaterialf(GL_FRONT, GL_SHININESS, 10.0f);
glMaterialfv(GL_FRONT, GL_EMISSION, material2[3]);
}
IntegralnymelementemmodeluoświetleniaprzyjętegowbiblioteceOpenGLjestopis
sposobuzachowaniasiępowierzchniobiektównaposzczególnerodzajeświatłaczyliopis
właściwościmateriałówModyfikowaniewłaściwościmateriałówumożliwiająfunkcjez
grupy
glMaterial
którychwykorzystaniewidocznejestnapowyższymlistingu
- 4 -
Kolejną czynnością było zdefiniowanie parametrów źródeł światła Realizuje to
poniższyfragmentkodu
// Zrodla swiatla
bool light1Src = false;
bool light2Src = false;
GLfloat light1[4][4] = { // zolty reflektor (natezenie 1)
{ 1.0f, 1.0f, 0.0f, 1.0f}, // diffuse
{ 1.0f, 1.0f, 0.0f, 1.0f}, // specular
{ 0.0f, 0.0f, 1.0f, 1.0f}, // position
{ 0.0f, 0.0f, -1.0f} // spot direction
};
GLfloat light2[4][4] = { // niebieskie kierunkowe (natezenie 0.8)
{ 0.0f, 0.0f, 1.0f, 0.8f}, // diffuse
{ 0.0f, 0.0f, 1.0f, 0.8f}, // specular
{ -10.0f, -5.0f, 10.0f, 1.0f}, // position
{ 10.0f, 5.0f, -10.0f} // spot direction
};
Zmienneboolowskieokreślajączydaneźródłoświatłajestwłączone– domyślnieoba
źródłasąwyłączone
Parametr
position
określa położenie źródła światła jak się okaże składowe tego
parametru podane są w układzie współrzędnych sceny Parametr
spot direction
to
znormalizowanytrójwspółrzędnywektorokreślającykierunekreflektora
Tymrazemodpowiedniedobraniepowyższychparametrówniebyłojużtakietrudne
Zatem odbyło się to szybko i przeszedłem do realizacji funkcji ustawiających wyżej
zdefiniowaneźródłaświatła
// Funkcja ustawiajaca zrodlo swiatla 1
void setLight1() {
glPushMatrix();
// Ustawienie polozenia
glRotatef(l1RotX, 1.0f, 0.0f, 0.0f);
glTranslatef(0.0f, 0.0f, l1Radius);
// Ustawienie zrodla w postaci kuli
glPushMatrix();
glDisable(GL_LIGHTING);
glColor3f(1.0f, 1.0f, 0.0f);
glutSolidSphere(1.0, 30, 30);
glEnable(GL_LIGHTING);
glPopMatrix();
// Ustawienie parametrow swiatla
glLightfv(GL_LIGHT0, GL_DIFFUSE, light1[0]);
glLightfv(GL_LIGHT0, GL_SPECULAR, light1[1]);
glLightfv(GL_LIGHT0, GL_POSITION, light1[2]);
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, light1[3]);
glLightf (GL_LIGHT0, GL_SPOT_EXPONENT, 1.0f);
glLightf (GL_LIGHT0, GL_SPOT_CUTOFF, 30.0f);
glPopMatrix();
}
// Funkcja ustawiajaca zrodlo swiatla 2
void setLight2() {
glLightfv(GL_LIGHT1, GL_DIFFUSE, light2[0]);
glLightfv(GL_LIGHT1, GL_SPECULAR, light2[1]);
glLightfv(GL_LIGHT1, GL_POSITION, light2[2]);
glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, light2[3]);
}
- 5 -
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • kachorra.htw.pl