POLITECHNIKA WROCŁAWSKA
Instytut Informatyki, Automatyki i Robotyki
Zakład Systemów Komputerowych
Wprowadzenie do grafiki komputerowej
Kurs: INE4234L
Sprawozdanie z ćwiczenia nr 5
TEMAT ĆWICZENIA OpenGL-teksturowanie powierzchni obiektów
Wykonał: |
Elżbieta Tchorowska |
Termin: |
Np. PT/P 16.00-19.00 |
Data wykonania ćwiczenia: |
03.12.2010 |
Data oddania sprawozdania: |
14.01.2011 |
Ocena: |
|
Uwagi prowadzącego:
|
Spis treści
Cel ćwiczenia
Celem było stworzenie ostrosłupa z teksturowaną powierzchnią oraz zmodyfikowanie jajka z poprzednich laboratoriów tak, by również posiadał teksturowaną powierzchnię.
Wykonanie
Stworzenie ostrosłupa
Najpierw należało stworzyć ostrosłup. Wykonano z kwadratu i czterech trójkątów.
Kwadrat umieszczono na płaszczyźnie 2D. Jego wierzchołki wybrano tak, jak pokazano w kodzie. Dobrano odpowiedni kierunek tworzenia wierzchołków, by teksturowana powierzchnia znajdowała się „od spodu” kwadratu. Góra będzie zabudowana trójkątami.
Wysokość w przestrzeni wybrano na 0.75. Kolejność podawania wierzchołków do renderowania została ustalona tak, by teksturowana powierzchnia była widoczna z zewnątrz ostrosłupa, a nie od wewnątrz.
Teksturowanie ostrosłupa
Kod należało powiększyć o bardzo długą funkcję teksturowania, której z powodu jej długości nie zamieszczę. (Funkcja do obejrzenia na stronie zsk)
Stworzono teksturę piłek tenisowych, którą wklejono do katalogu z projektem, nazwano 1.tga, gdyż tekstura powinna być w tym formacie. Rozdzielczość 256x256.
Następnie należało umieścić w kodzie następujący fragment:
I ostrosłup został wyświetlony w piłeczki tenisowe.
Teksturowanie jajka
Jajko poddano teksturowaniu w identyczny sposób. Wykorzystano do tego efekt poprzednich laboratoriów z oświetleniem. Dla lepszego efektu jajka, obiekt obracał się przy zmianie położenia kursora przy wciśniętym lewym przycisku myszy, a źródło światła zmieniało położenie po ruchu przy wciśniętym prawym klawiszu myszy.
Wybrano teksturę muszelek.
Wyniki
Teksturowany ostrosłup wyglądał tak:
Teksturowane jajko wyglądało tak:
str. 4
glEnable(GL_CULL_FACE); //teksturowanie jednej strony
pBytes = LoadTGAImage("1.tga", &ImWidth, // Przeczytanie obrazu tekstury
&ImHeight, &ImComponents, &ImFormat); //z pliku o nazwie 1.tga
glTexImage2D(GL_TEXTURE_2D, 0, ImComponents, // Zdefiniowanie tekstury 2-D
ImWidth, ImHeight, 0, ImFormat, GL_UNSIGNED_BYTE, pBytes);
free(pBytes); // Zwolnienie pamięci
glEnable(GL_TEXTURE_2D); // Włączenie mechanizmu teksturowania
glTexEnvi(GL_TEXTURE_ENV, // Ustalenie trybu teksturowania
GL_TEXTURE_ENV_MODE, GL_MODULATE);
// Określenie sposobu nakładania tekstur
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glBegin (GL_TRIANGLES);
glTexCoord3f(0.5f, -0.5f,0.0f);
glVertex3f (0.5f, -0.5f,0.0f);
glTexCoord3f(0.5f, 0.5f,0.0f);
glVertex3f (0.5f, 0.5f,0.0f);
glTexCoord3f(0.0f, 0.0f,0.75f);
glVertex3f (0.0f, 0.0f,0.75f);
glEnd();
glBegin (GL_TRIANGLES);
glTexCoord3f(0.5f, 0.5f,0.0f);
glVertex3f (0.5f, 0.5f,0.0f);
glTexCoord3f(-0.5f, 0.5f,0.0f);
glVertex3f (-0.5f, 0.5f,0.0f);
glTexCoord3f(0.0f, 0.0f,0.75f);
glVertex3f (0.0f, 0.0f,0.75f);
glEnd();
glBegin (GL_TRIANGLES);
glTexCoord3f(-0.5f, 0.5f,0.0f);
glVertex3f (-0.5f, 0.5f,0.0f);
glTexCoord3f(-0.5f, -0.5f,0.0f);
glVertex3f (-0.5f, -0.5f,0.0f);
glTexCoord3f(0.0f, 0.0f,0.75f);
glVertex3f (0.0f, 0.0f,0.75f);
glEnd();
glBegin (GL_TRIANGLES);
glTexCoord3f(-0.5f, -0.5f,0.0f);
glVertex3f (-0.5f, -0.5f,0.0f);
glTexCoord3f(0.5f, -0.5f,0.0f);
glVertex3f (0.5f, -0.5f,0.0f);
glTexCoord3f(0.0f, 0.0f,0.75f);
glVertex3f (0.0f, 0.0f,0.75f);
glEnd();
glBegin (GL_QUADS);
glTexCoord2f (-0.5f,0.5f);
glVertex2f (-0.5f,0.5f);
glTexCoord2f (0.5f,0.5f);
glVertex2f (0.5f,0.5f);
glTexCoord2f (0.5f,-0.5f);
glVertex2f (0.5f,-0.5f);
glTexCoord2f(-0.5f, -0.5f);
glVertex2f (-0.5f, -0.5f);
glEnd();