WOJSKOWA AKADEMIA TECHNICZNA
LABORATORIUM GRAFIKA KOMPUTEROWA
SPRAWOZDANIE:
Laboratorium 1 – modelowanie obiektów za pomocą trybu
GL_QUAD_STRIP
PROWADZADZĄCY:
dr inż. Marek Salamon
WYKONAŁ:
Mateusz Faustman I7X1N1
DATA:
06.02.2009
1.
Cel ćwiczenia – Celem ćwiczenia było zapoznanie się z generatorem adresu
odczytu wykorzystywanym przy wyświetlaniu grafiki w środowisku OpenGL oraz
wykonanie 3 zadań wymagających modyfikacji sposobu w jaki odczytywane są
kolejne piksele obrazu w celu otrzymania konkretnych efektów.
2. Treść zadania – W trakcie ćwiczeń do wykonania były 3 zadania:
a.
Napisać algorytm sterujący generatorem adresu odczytu w celu uzyskania
efektu przesuwania poziomego obrazu w kierunku prawej i lewej strony.
b.
Napisać algorytm sterujący generatorem adresu odczytu w celu uzyskania
efektu przewijania poziomego obrazu w kierunku lewej krawędzi ekranu.
c.
Napisać algorytm sterujący generatorem adresu odczytu w celu uzyskania
efektu zasłaniania pionowego w kierunku dolnej krawędzi.
d.
3. Przebieg ćwiczenia:
We wszystkich wykonywanych zadaniach kluczową rzeczą było użycie funkcji
ReadPixel(int x, int y) (która powodowała wyświetlenie na urządzeniu
zobrazowania pojedynczego piksela obrazu o podanych w parametrach funkcji
współrzędnych x oraz y) oraz funkcji ReadTlo(N) (która pozwala na
„zasłanianie” obrazu pixelami określonego koloru. Również ważne było
poprawne wykorzystywanie zwiększanego cyklicznie parametru p (w zakresie
0-256) co pozwalało wygodnie adresować kolejne piksele obrazu (obraz ma
wymiary 256x256).
Każda wykorzystana funkcja jest typu void – nie zwraca ani nie przyjmuje
żadnych parametrów. Wszystkie wyniki są wyświetlane na standardowym
wyjściu w trakcie działania funkcji.
Zadanie 1
Zadanie polegało na podzieleniu obrazu na 2 równe części wzdłuż osi Y i
stopniowe zasłanianie obrazu od środka do skrajnych krawędzi obrazu.
Zasłanianie polegało na dodawaniu 1 czarnego pixela przy każdej iteracji pętli
głównej i jednoczesnym przesuwaniu obu części obrazu również o 1 pixel.
Kod źródłowy algorytmu:
public
void
Efekt3()
{
if
(p >= L) p = 0;
Gdy p przekroczy 256 jest zerowane
Ż
eby nie wyj
ść
poza obraz.
for
(
int
j = 1; j <= L; j++)
Wszystkie pionowe linie sa przetwarzane razem
{
for
(
int
i = 1 + p; i <= K / 2;
i++)
Dzieli obraz na 2 cz
ęś
ci i pobiera (1+nr iteracji ) pixeli
obrazu
ReadPixel(i, j);
for
(
int
i = 1; i <= p; i++)
Przetwarza zasłanianie prawej cz
ęś
ci obrazu
ReadTlo(N);
for
(
int
i = K/2+1; i <= K/2+p;
i++)
Przetwarza zasłanianie lewej cz
ęś
ci obrazu
ReadTlo(N);
for
(
int
i = K / 2 + 1; i <= K
- p; i++)
Zaczyna rysowanie od połowy ekranu
ReadPixel(i, j);
i rysuje K/2-p pixeli obrazu
}
Zadanie 2
Zadanie polegało na przesuwaniu obraz w lewą stronę czyli rysowaniu w
każdej kolejnej iteracji na miejsc u pixela (x,y) pixela(x+1,y).
Kod źródłowy algorytmu:
public
void
Efekt2()
{
if
(p >= L) p = 0;
warunek dzięki któremu pętla nie zakończy się po
dojściu do wartości 256 (koniec obrazka)
for
(
int
j = 1; j <= L; j++)
{
for
(
int
i = 1 + p; i <= K; i++)
Rysowane jest K-p pixeli na początku 256
ReadPixel(i, j);
a na końcu 0
for
(
int
i = 1; i <= p; i++)
Rysowana jest p pixeli czyli w każdej iteracji
ReadPixel(i, j);
Rysowanych jest K-p+p=K=256 pixeli
}
}
Zadanie 3
Zadanie polega na zasłanianiu obrazu 1 linią poziomą w każdej kolejnej
iteracji.
Kod źródłowy algorytmu:
public
void
Ef
ekt1()
{
if
(p >= L) p = 0;
for
(
int
j = 1; j <= p; j++)
Najpierw rysowanych jest 0 linii czarnych
{
w każdej kolejnej iteracji rysowana jest 1 więcej
for
(
int
i = 1; i <= K; i++)
ReadTlo(N);
}
for
(
int
j = 1; j <= L - p; j++)
W pierwszej iteracji rysowanych jest 256 linii
{
obrazka, w każdej kolejnej 1 mniej
for
(
int
i = 1; i <= K; i++)
ReadPixel(i, j+p);
j+p oznacza że pobierana jest p-ta kolumna dzięki
}
czemu obraz nie przesuwa się w kolejnych iteracjach
}
4. Wnioski:
Podczas zajęć wykonywaliśmy zadania które umożliwiły nam poznanie jednej z
metody wpływania na sposób wyświetlania obrazu na ekranie, odpowiednio
manipulując adresami kolejno wyświetlanych pikseli mogliśmy wywołać pożądane
efekty.