background image

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

 

 
 
 
 
 
 
 
 
 
 
 
 

background image

 
 
 
 
 
 
 
 
 
 
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.

 

 

3Przebieg ć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. 
 

background image

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 

 

background image

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 
 

 

 

 

 

 

 

 

 

   

 

 

 

 

 

 

background image

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.