Ray3D powstał jako projekt z przedmiotu Metody i Języki Programowania. Celem naszego projektu była implementacja „algorytmu rzucania promieni” – ang. raycasting. W specyfikacji projektu założyliśmy jego podział na 3 części:

-edytor tekstur (podstawowe narzędzie do tworzenia i edycji grafiki używanej dalej w wizualizacji);

-edytor mapy (edycja mapy);

-odrębna aplikacja symulacyjna, demonstrująca działanie algorytmu;

 

            W trakcie prac z projektem postanowiliśmy 2 ostatnie części złączyć, takie podejście umożliwia obserwowanie naniesionych zmian w edytorze mapy i łatwiejszy wybór tekstur.

 

 

 

 

Edytor bitmap

 

               

 

Wygląd okienka edytora tekstur.

 

                Opis obsługi.

 

Okienko edytora tekstur zostało podzielone na dwie części tj. edycyjną i prezentacji. W części edycyjnej zawartość można zmieniać przeciągając myszką z przyciśniętym lewym klawiszem myszki. Rysowane są zawsze punkty bieżącym kolorem.

 

W menu File dostępne są następujące funkcje:

- utworzenie nowego dokumentu;

- odczyt pliku w formacie *.tex (tj. własnym formacie aplikacji);

- załadowanie pliku BMP ( do tekstury zostanie włączony początkowy kwadrat 64 x 64 pikseli)

-  wyjście z aplikacji;

 

W menu Edit:

- undo

- cut

- copy

- paste

( działanie tych poleceń jest typowe )

 

W menu Effects:

- Set color – zamalowuje całą teksturę bieżącym kolorem;

- Grayscale – konwertowanie obrazka do odcieni szarości (może nie potrzebne, ale ładnie wygląda);

- Brightness – rozjaśnianie obrazka;

- Darkness – przyciemnianie;

 

W menu View można ukryć (albo pokazać) pasek narzędzi, pasek statusowy (Status Bar), ewentualnie wywołać okienko dialogowe do wyboru koloru.

 

W menu Help wywoływane jest okienko dialogowe o autorach.

 

            Po uruchomieniu aplikacji okno kolor jest domyślnie ustawiany na czarny tj RGB(0,0,0). Okienko dialogowe do wyboru koloru można również wywołać dwukrotnie kliknięciem myszki w oknie aplikacji.

 

            Informacja

           

            Aplikacja ta działa na bazie klasy CWnd, w projekcie posłużyliśmy się kreatorem, który wygenerował klasę CChildView. Ponadto stworzyliśmy własną klasę CBitmapa przechowującą teksturę. Wszystkie metody klasy CBitmapa są dość szczegółowo opisane w plikach źródłowych, zatem nie powielamy komentarzy. Modyfikacja klasy CChildView umożliwiła nam przejęcie obsługi zdarzeń, a umieszczony w niej obiekt zadeklarowany: CBitmapa tekstura;

pozwolił na bezpośrednie wykorzystanie metod klasy CBitmapa.

 

 

 

 

 

Edytor mapy

Widok edytora mapy.

 

W lewej części widoku aplikacji znajduje się pole edycji planszy. Określamy w nim kształt wirtualnej przestrzeni gry. Klikając na poszczególne pola ustawiamy ściany. Na prawo znajduje się pole widoku tworzonej planszy. Pod nim umieszczone jest pole wyboru tekstury.

Klawiszami PageUP oraz PageDown możemy zmieniać tekstury, które chcemy nałożyć na poszczególne ściany. Jeżeli użytkownik kliknie jakikolwiek klawisz to w polu widoku planszy generowany jest obraz świata z uaktualnionej mapy.

 

Opis: W aplikacji stworzyliśmy dwie własne klasy tj. CRayMap, i CTextura. Głównym „silnikiem” (ang. Engine) jest funkcja ray_casting, zwraca ona wyniki w 3 tablicach:

- dist_array – długości pasków do rysownia

- bound_array – do wyboru odpowiedniego paska z tekstury

- marked_texture – do wyboru odpowiedniej tekstury

 

Klasa CTextura służy do do przechowywania obrazka.

W klasie CChildView umieszczona jest tablica textur i obiekt klasy CRayMap o nazwie moj_ray, na którym bazuje cała komunikacja pomiędzy klasami.

 

Źródła:            Pliki edytora mapy są tutaj  

                        Pliki edytora textur są tutaj

 

 

Kilka słów na koniec

Można by zrobić jeszcze wiele niewielkim kosztem… Edytor mapy nie wyposażony jest w zapis itd… Efekty w Edytorze bitmap bardzo łatwo byłoby rozwinąć… ale zabrakło czasu.

Rozwiązania, tj zmienne w klasie CRayMap można by używać przy dowolnym rozmiarze mapy, i dowolnych rozmiarach komórek.

 

 Głównymi założeniami naszego projektu były:

-poznanie środowiska tworzenia aplikacji w Visual C++,

-generowania przestrzeni trójwymiarowej,

-ogólne zasady teksturowania skalowania oraz tworzenia i edycji map bitowych

Te założenia udało nam się zrealizować.

Głównym powodem dość wolnego działania aplikacji jest brak wykorzystania dedykowanych graficznych bibliotek (np. Direct Draw – nie chodziło o szybkość działania, ale prostotę algorytmu). Całość wyświetlania aplikacji jest oparta na jednej funkcji tj. SetPixel(). Ponadto w całej aplikacji przetwarzamy 24 bitowe kolory.

 

 

 

 

 

 

 

 

 

 

O Autorach: P&P

Przemysław Krygier (KCE)

kcepk@o2.pl

Gadu 1817366

 

 

 

 

 

 

 

 

 

 

 

 

 

                                                                                                                                             Przemysław Konopczyński (CzOlO)

                                                                                                         czolo@o2.pl

                                                                                                         Gadu 5285673