Paweł Madejski I7X1 doc


WOJSKOWA AKADEMIA TECHNICZNA

Sprawozdanie laboratoryjne z przedmiotu

GRAFIKA KOMPUTEROWA

Wykonujący ćwiczenie: Paweł Madejski

Prowadzący: dr inż. Marek Salamon

Data wykonania: 27.10.2008r

Grupa szkoleniowa: I7X1S1

Treść zadania (zestaw 12):

  1. Napisać algorytm sterujący generatorem adresu odczytu w celu uzyskania efektu zasłaniania poziomego obrazu w kierunku prawej strony ekranu.

  1. Napisać algorytm sterujący generatorem adresu odczytu w celu uzyskania efektu przewijania pionowego obrazu w kierunku dolnej krawędzi ekranu.

  1. Napisać algorytm sterujący generatorem adresu odczytu w celu uzyskania efektu przesuwania obrazu wzdłuż przekątnej ekranu w kierunku dolnego prawego wierzchołka.

Opis zadania:

Na podstawie programu „Symulator efektów” symulującego efekty graficzne uzyskiwane na ekranie rastrowego mieliśmy zaprojektować algorytmy operujące z obiektami graficznymi na podstawie zadanych zadań.

0x08 graphic

rys. interfejs programu używanego na laboratorium

Aby dokładniej zrozumieć operacje wykonywane w algorytmach przedstawię pokrótce zasadę działania urządzenia graficznego wyposażonego w rastrową technikę wyświetlania obrazu.

Grafika rastrowa - reprezentacja obrazu za pomocą pionowo-poziomej siatki odpowiednio kolorowanych pikseli na monitorze komputera, drukarce lub innym urządzeniu wyjściowym.

(źródło: wikipedia.pl)

W naszym przypadku do obsługi pikseli wyświetlanych na ekranie używamy funkcji:

ReadPixel(i,j) - funkcja wstawiająca w aktualne miejsce na ekranie zawartości piksela spod komórki i,j (z poprzednio zapamiętanej pamięci obrazu).

ReadTlo(N) - funkcja wstawiająca w miejsce bieżącego aktywnego piksela na ekranie koloru o wartości N (w naszym przypadku jest to kolor czarny).

L - ilość wierszy obrazu.

K - ilość kolumn obrazu.

i,j - odpowiednio położenia w wierszu (i) i kolumnie (j).

Wykonanie zadań:

  1. algorytm sterujący generatorem adresu odczytu w celu uzyskania efektu zasłaniania poziomego obrazu w kierunku prawej strony ekranu.

1. public void Efekt1(){

2. //efekt: ZAD1 zasłanianie poziome obrazu w kierunku prawej strony

3. if(p >= L) p = 0;

4.

5. for (int j = 1; j <= L; j++){

6. for (int i = 1; i <= p; i++)

7. ReadTlo(N);

8. for (int i = p + 1; i <= K; i++)

9. ReadPixel(i, j);

10. }

11. }

Dana funkcja składa się z trzech pętli for, dwóch wewnętrznych odpowiadających za wypełnienie kolumn i jednej zewnętrznej, która odpowiada za każdą kolejną linię (linijka 5. listingu) Zmienna p określa aktualne położenie początku “ czarnej dziury”, która pochłania panią na fotografii z każdą kolejną klatką animacji. Jeśli jednak nasza “dziura” pochłonie już wszystko (będzie większa bądź równa od ilości kolumn równej 256) zniknie. Za to działanie odpowiedzialna jest linijka 3. naszego listingu. Za wypełnianie czarnym kolorem pierwszych p kolumn pikseli w linii jest podpowiedzialna pętla z linii 6 oraz funkcja ReadTlo(N); Po wypełnienu tych pierwszych p pikseli w danym wierszu trzeba uzupełnić kolejne K-p pikseli w których powininna zostać wyświetlona zawartość obrazu zasłanianego (linie 8-10).

0x08 graphic
rys. działanie funkcji Efekt1()

  1. algorytm sterujący generatorem adresu odczytu w celu uzyskania efektu przewijania pionowego obrazu w kierunku dolnej krawędzi ekranu.

1. public void Efekt2(){

2. //efekt: ZAD 2 przewijanie pionowe obrazu w kiejrunku dolnej krawedzi obrazu

3.

4. if(p >= L) p = 0;

5.

6. for (int j = L - p; j <= L; j++){

7. for (int i = 1; i <= K; i++)

8. ReadPixel(i, j);

9. }

10. for (int j = 1; j <= L - p; j++){

11. for (int i = 1; i <= K; i++)

12. ReadPixel(i, j);

13. }

14. }

Funkcja Efekt2() praktycznie nie wiele różni się od poprzednio opisanej. Zasadniczą różnicą jest zmiana przeznaczenia wskaźnika p, który w tym przypadku odpowiada za wyznaczenie wiersza w któeym kończy się i zarazem zaczyna obraz. Wydaje się to trochę dziwne (koniec i początek w tym samym miejscu) ale w rzeczywistości tak własnie jest. Tutaj mamy dwie pętle zewnętrzne, z których każda ma swoją pętlę wewnętrzną. Jest tak ponieważ najpierw trzeba wypełnić wszystkie kolumny w początkowych wierszach (odwzorowywują one koniec obrazka), a dopiero pożniej pozostałą część przesuniętą w tym przypadku do dołu. W tym algorytmie nie używamy funkcji ReadTlo ponieważ nie wypełniamy żadnego obszaru tłem tylko w miejsce odsłonięte przesunięciem wstawiamy linie która znikneła nam po przesunięciu (tworząc swego rodzaju cykl).

0x08 graphic

rys. działanie funkcji Efekt2()

  1. algorytm sterujący generatorem adresu odczytu w celu uzyskania efektu przesuwania obrazu wzdłuż przekątnej ekranu w kierunku dolnego prawego wierzchołka.

1. public void Efekt3(){

2. //efekt: ZAD 3 przesuwanie obrazu wzdłuż przekątnej ekranu w kierunku dolnego

3. //prawego wierzchołka

4.

5. if(p >= L) p = 0;

6.

7. for (int j = 1; j <= L; j++){

8. if (j <= p)

9. for (int i = 1; i <= K; i++)

10. ReadTlo(N);

11. else{

12. for (int i = 1; i <= K; i++){

13. if (i <= p) ReadTlo(N);

14. else ReadPixel(i - p, j - p);

15. }

16. }

17. }

18. }

Efekt3() jest zarazem ostatnią jak i najtrudniejszą funkcją w całym zadaniu laboratoryjnym. Oprócz prostych pętli for zawiera ona również instrukcje warunkowe które wskazują miejsca w których powinniśmy użyć odpowiednich pętli, bądź funkcji. Wiadomo, że jeśli przesuniemy jakiś przedmiot zawsze pod nim jest jakieś tło. Zakładając więc, że nasze zdjęcie było umieszczone w albumie z czarnymi stronicami, a my chcemy je wyjąć w kierunku dolnego prawego wierzchołka naszego albumu to po każdym “małym ruchu” odsłaniane będą kolejne czarne części pustych stronic albumu (jak na rysunku). Trzeba było też znów posłużyć się naszą niezastąpioną zmienną p. Teraz oprócz wskaźnika miejsca podziału między obrazem (ReadPixel), a tłem (ReadTlo) pozwala nam na odnalezienie lewego górnego wierzchołka, od którego zaczynamy rysować (zczytywać pixele)naszego tła.

0x08 graphic
rys. działanie funkcji Efekt3()



Wyszukiwarka

Podobne podstrony:
lab4 Paweł Madejski I7X1, Studia, WAT Informatyka, s3 - GK - grafika komputerowa, LAB4
lab2 Paweł Madejski I7X1, Studia, WAT Informatyka, s3 - GK - grafika komputerowa, LAB2
Paweł Nigardowski pop doc
Paweł Madejski i7b1s1 SCK lab4
ZADANIE PROJEKTOWE. 1 Madejski Grzegorz & Michalski Paweł, Elektrotechnika, SEM3, Metody numeryczne
pawel to sa pomiary ze sprawozdaniem doc
PAWEŁ doc
Paweł Obarecki i Stanisława Bozowska charakterystyka porównawcza bohaterów „Siłaczki” doc
KAIZEN ciagłe doskonalenie Paweł Kuś doc
paweł współczynniki doc
fizyka budowli pawel doc
Zadania aerologia Pawel doc
Pozary proj I pawel nowacki doc
(Doc) Papież, Ojciec Święty Biblia A Rodowód Urzędu (Jan Paweł Ii Karol Wojtyła Zmarł)
wahadło torsyjne Paweł doc
europejski system energetyczny doc

więcej podobnych podstron