Grafika komputerowa Zaj¦cia 5

Transkrypt

Grafika komputerowa Zaj¦cia 5
Graka komputerowa
Zaj¦cia 5
Wiadomo±ci dodatkowe:
• Funkcja ustalaj¡ca punkt patrzenia: gluLookAt(x_0, y_0, z_0, xref, yref, zref, Vx, Vy, Vz), gdzie (x_0,
•
•
•
•
•
•
•
y_0, z_0) jest punktem z którego patrzymy w naszym ukªadzie wspóªrz¦dnych, (xref, yref, zref) jest punktem na który chcemy patrze¢, za± wektor (Vx, Vy, Vz) ustala kierunek pionowy 'aparatu fotogracznego'.
Funkcja ta dziaªa w trybie GL_MODELVIEW.
Funkcja ustalaj¡ca parametry rzutowania ortogonalnego: glOrtho(xwmin, xwmax, ywmin, ywmax, dnear,
dfar), gdzie ustala obj¦to±¢ która zostanie zrzutowana na 'klisz¦ fotograczn¡'. Funkcja dziaªa w trybie
GL_PROJECTION.
Funkcja ustalaj¡ca rzutowania z perspektyw¡: gluPerspective(theta, aspect, dnear, dfar), gdzie theta jest
k¡tem perspektywy, aspect okre±la stosunek wysoko±ci do szeroko±ci 'kliszy fotogracznej', za± dnear i
dfar okre±laj¡ zakres obj¦to±ci która znajdzie si¦ na 'zdj¦ciu'.
Funkcje rysuj¡ce wielo±ciany: glutWire* i glutSolid*, gdzie * mo»e by¢: Tetrahedron, Cube, Octahedron,
Dodecahedron, Icosahedron, Sphere, Cone, Torus, Teapot.
Bufor gª¦boko±ci jest dodatkowym buforem w którym zapami¦tywane s¡ kolory pikseli poªo»onych najbli»ej
kamery. Umo»liwia to wyeliminowanie wy±wietlania niewidocznych powierzchni. Bufor udost¦pniamy
poleceniem glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
Mo»liwe jest pomini¦cie wyliczania jednej ze stron wielo±cianu dzi¦ki poleceniu glEnable(GL_CULL_FACE)
a nast¦pnie glCullFace(mode ), gdzie mode mo»e by¢ GL_BACK, GL_FRONT lub GL_FRONT_AND_BACK.
Opcj¦ mo»na wyª¡czy¢ poprzez glDisable(GL_CULL_FACE).
Teksturowanie uruchamiamy poprzez glEnable(GL_TEXTURE_2D). Potrzebne funkcje:
1. glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texWidth, texHeight, 0, dataFormat, dataType, surfTexArray), gdzie w kolejno±ci GL_TEXTURE_2D oznacza »e deniujemy dwuwymiarow¡ tekstur¦ (mo»e by¢ jeszcze jedno- lub trzywymiarowa), 0 oznacza »e deniowana tekstura nie
jest pomniejszeniem innej tekstury, GL_RGBA oznacza system zapisu koloru tekstury, texWidth i
texHeight s¡ wielko±ciami tekstury, 0 oznacza »e nie chcemy dodatkowego pikselu na brzegu tekstury
(druga mo»liwa warto±¢ czyli 1 dodaje taki piksel; jest on u»ywany do gªadszego sklejania s¡siaduj¡cych tekstur, dataFormat powtarzamy format zapisu tekstury (GL_RGBA), dataType przyjmuje
warto±¢ GL_UNSIGNED_BYTE, natomiast surfTexArray jest adresem tekstury.
2. glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST) - deniuje sposób wyliczania koloru tekstury przy powi¦kszaniu
3. glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST) - deniuje sposób wyliczania koloru tekstury przy pomniejszaniu
4. glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, applicationMethod) - deniuje
sposób doklejenia tekstury: je±li jako applicationMethod wybierzemy GL_REPLACE dane tekstury
zast¡pi¡ dane z powierzchni, dla GL_MODULATE dane z tekstury zostan¡ pomno»one przez dane
z powierzchni, dodatkowe opcje to GL_DECAL oraz GL_BLEND
5. glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP) - deniuje w
jaki sposób powtarza¢ tekstur¦ w kierunku 's', GL_CLAMP ±ciska tekstury (w przypadku gdyby
podane rozmiary byªy wi¦ksze od przedziaªu (0,1), natomiast GL_REPEAT powtarza.
6. glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP) - deniuje w
jaki sposób powtarza¢ tekstur¦ w kierunku 't'
Kod generuj¡cy czarno-biaª¡ tekstur¦: http:
th-www.if.uj.edu.pl/-korcyl .
1
Zadania:
1. Prosz¦ doko«czy¢ zadania z poprzednich ¢wicze«.
2. Korzystaj¡c z wierzchoªków (glBegin(GL_QUADS)) prosz¦ narysowa¢ sze±cian o ró»nokolorowych ±cianach. Prosz¦ sprawdzi¢ zachowanie si¦ sze±cianu przy zmianie pozycji kamery.
3. Prosz¦ uruchomi¢ bufor gª¦boko±ci i ponownie sprawdzi¢ zachowanie si¦ sze±cianu przy zmianie pozycji
kamery.
4. Prosz¦ uruchomi¢ teksturowanie i narysowa¢ sze±cian ze ±cianami oklejonymi tekstur¡ w czarno-biaª¡
szachownic¦.
2