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