t sprawko lab2

Data wykonania ćwiczenia:
2010-01-11

Autor: Teodor Kulej
Grupa: I8Y1S1

Labolatorium
Grafika komputerowa

Sprawozdanie z ćwiczenia labolatoryjnego

Prowadzący: dr inż. W. Sulej

Zadanie polegało na napisaniu programu używającego bibliotek OpenGL i GLUT rysującego walec o wymiarach zadanych przez prowadzącego, stosując do rysowania trybu GL_QUAD_STRIP.

Zadanie zrealizowałem tworząc kod rysujący podstawę górną i dolną, a następnie powierzchnię boczną bryły. W realizacji tego zadania użyteczna była znajomość układu współrzędnych polarnych, dzięki któremu przekształcenie współrzędnych z dwójki kąt-promień do dwójki x-y było wyjątkowo proste. Kod funkcji rysującej walec prezentuje się następująco:

float fijo=0;

float fijx=0;

float fijy=0;

void rysuj(){

float H=4.0;

float r=1.0;

float fi;

int i=0,j=0;

float h=0;

float vstep=360.0/verticals;

float hstep=H/(1.0*horizintals);

do{

glBegin(GL_QUAD_STRIP);

fi=0;

i=0;

do{

glVertex3f(fijx+r*sin(DEG2RAD(fi+fijo)),fijy+h,r*cos(DEG2RAD(fi+fijo)));

glVertex3f(fijx+r*sin(DEG2RAD(fi+fijo)),fijy+h+hstep,r*cos(DEG2RAD(fi+fijo)));

fi+=vstep;

}while(i++<verticals);

glEnd();

h+=hstep;

}

while(++j<horizintals);

fi=0;

i=0;

glBegin(GL_QUAD_STRIP);

do{

glVertex3f(fijx+0,fijy+0,0);

glVertex3f(fijx+r*sin(DEG2RAD(fi+fijo)),fijy+0,r*cos(DEG2RAD(fi+fijo)));

fi+=vstep;

}while(i++<verticals);

glEnd();

fi=0;

i=0;

glBegin(GL_QUAD_STRIP);

do{

glVertex3f(fijx+0,fijy+H,0);

glVertex3f(fijx+r*sin(DEG2RAD(fi+fijo)),fijy+H,r*cos(DEG2RAD(fi+fijo)));

fi+=vstep;

}while(i++<verticals);

glEnd();

}

Wykorzystany tryb pracy Quad Strips oznacza, że program musi za pomocą API OpenGLa podawać współrzędne wierzchołków w postaci: 1, 2, 3, 4 dla pierwszego wierzchołka, a następnie 3, 4 i dla kolejnych 3, 4; gdzie cyfry 1, 2, 3, 4 oznaczają współrzędnym wierzchołków 1, 2, 3 i 4, zaczynając odpowiednio od lewego górnego rogu, przez lewy dolny, prawy dolny i prawy górny. Dzięki tej kolejności rysowane polygony będą zwrócone ścianą widzialną dla widza, czyli z wektorem normalnym ściany zwróconym w stronę kamery. Ten tryb uproszcza rysowanie wierzchołków, bo dla rysowania „paska” polygonów wystarczy tylko podawać 2 dla każdej kolejnej ściany zamiast 4, z czego każde kolejne 2 pary by się powtarzały.

Podstawy walca również zostały narysowane w tym trybie. Współrzędna środka podstawy powtarzałą się w każdej kolejnej parze. Ten tryb do rysowania wierzchołków jest ewidentnie gorszy od trybu Fan, w którym wystarczy podać środek i kolejne wierzchołkileżące na brzegu podstawy.

Zmienne rodziny fij* służą co zmiany współrzędnych figury – zmiany położenia, operując na układzie kartezjańskim oraz zmiany kąta obrotu bryły operując na współrzędnych polarnych. Dzięki temu mogłem w programie przesuwać w przestrzeni i obracać bryłę aby wykryć ewentualne niedoskonałości.

Zmienne horizintals i verticals przechowują informację o podziale bryły na segmenty. Należy zazaczyć, że w trybie rysowania siatki bryły, obraz jest kanciasty. Dla najwyższej liczby podziałów pionowych (11) bryła zaczyna wyglądać na prawdziwie okrągłą, ale brak cieniowania uwydatniał kanty i ostre krawędzie walca. Na podstawie liczby podziałów ustalane są zmienne rodziny step, które wskazują na różnicę kąta fi o jakią wzrasta położenie kolejnych verteksów w danej płaszczyźnie przy rysowaniu, lub różnicę położenia.

W programie zmieniłem tryb rysowania, z perspektywy na ortho, dzięki któremu verteksy leżące w jednej linii, są tak rysowane i nie pojawia sie zniekształcenie perspektywy, nie występuje efekt paralaksy.

Rysowanie brył w OpenGL nie jest zadaniem trudnym, jednak wymaga pewnego przygotowania teoretycznego i przemyślenia problemu. Tryby rysowania brył wystarczają do rysowania prostych i skomplikowanych brył. Jednak do rysowania i późniejszego bryły wygodniej użyć gotowych modeli i je po prostu wczytywać, niż rysować ręcznie. Przy rosnącej liczbie wierzchołków przypadajacych na model w grach komputerowych, koncepcja rysowania ręcznego staje się bardzo niewygodna i nieużyteczna, chociaż w tworzeniu edytorów grafiki 3D będzie niezastąpiona.

Przykładowy render:


Wyszukiwarka

Podobne podstrony:
sprawko lab2
sprawko lab2
spr lab2 PA, AGH WIMIR AiR, Semestr 5, Sterowanie dyskretne, projekt SD NAW, z zajec, sprawko lab2 P
sprawko lab2 w5a 2014
Sprawko lab2(1)
sprawko lab2 w5a 2014(1)
sprawko z lab2 z auto by pawelekm
WDA Lab2 Sprawko ask, WAT, semestr III, Wprowadzenie do automatyki
lab2 sprawko by Vaz
sprawko nowe, Automatyka i Robotyka, Semestr III, Metody Obliczeniowe Optymalizacji, Gotowce, labki
sprawko-pieci, Studia, WAT Informatyka, s3 - GK - lab grafika komputerowa, Lab2
[lab2]sprawko przetworniki rzędu II 8, Studia, Metrologia(1)
Sprawko2PO(lab3i4), AGH WIMIR AiR, Semestr 3, JPO, lab2 JPO
WDA Lab2 Sprawko, WAT, semestr III, Wprowadzenie do automatyki
tbwcz - lab2 - dopasowanie impedancji -, Elektronika i telekomunikacja-studia, rok II, semIII, Tbwcz
El sprawko 5 id 157337 Nieznany
LabMN1 sprawko
I9M1S1 Nawrot Gudanowicz lab2

więcej podobnych podstron