Prezentacja wprowadzająca do podstaw programowania urządzeń mobilnych w j2me. Przygotowana i wygłoszona przez Marcina Majaka 19.11.2009.
Prezentacja wygłoszona w ramach Warsztatów programowania telefonów komórkowych w j2me przy Studenckim Kole Naukowym Informatyki Systemów Autonomicznych i Adaptacyjnych ISA^2.
Continuous Delivery w projekcie Open Source - Marcin Stachniuk - DevCrowd 2017
04 Wprowadzenie do Raycasting'u w j2me
1. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 19 listopada 2009
Wprowadzenie do Raycasting w J2ME
Marcin Majak
164000@student.pwr.wroc.pl
Politechnika Wrocławska
Wydział Elektroniki
Studenckie Koło Naukowe Informatyki Systemów Autonomicznych
i Adaptacyjnych2
19 listopada 2009
Marcin Majak Raycasting 1/30
2. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 19 listopada 2009
Plan prezentacji
1 Wprowadzenie
2 Początkowe ustalenia
3 Obliczanie odległości od obiektów
4 Ostateczny rezultat
5 Rysowanie podłogi
6 Rysowanie sufitu
Marcin Majak Raycasting 2/30
3. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 19 listopada 2009
Plan prezentacji
1 Wprowadzenie
2 Początkowe ustalenia
3 Obliczanie odległości od obiektów
4 Ostateczny rezultat
5 Rysowanie podłogi
6 Rysowanie sufitu
Marcin Majak Raycasting 3/30
4. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 19 listopada 2009
Z czym startujemy
1 int[][] RozkladPlanszy=new int [][]
2 {
3 {1,1,1,1,1,1,1},
4 {1,0,0,0,1,0,1},
5 {1,0,0,0,1,0,1},
t
6 {1,0,0,0,0,0,1},
7 {1,0,0,0,0,0,1},
8 {1,0,0,0,0,0,1},
9 {1,1,1,1,1,1,1},
10 };
Przykładowy rozkład planszy
Rozkład planszy
Położenie gracza
Marcin Majak Raycasting 4/30
5. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 19 listopada 2009
Czym jest RayCasting?
Raycasting można rozumieć jako próbę imitacji otaczającego
świata; to transformacja bardzo ubogiego zbioru danych
reprezentujących prostą mapę świata na projekcję 3D,
wykorzystując przy tym śledzenie promieni światła rzucanych od
obserwatora w stronę obserwowanego obiektu.
Przykładowa transformacja prostej mapy na obraz 3D, Rysunki pochodzą ze strony
http://www.permadi.com/tutorial/raycast
Marcin Majak Raycasting 5/30
6. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 19 listopada 2009
Różnica między Raycasting, a Raytracing
Przez większość programistów Raycasting jest uważany za
podklasę metody Raytracing, jednak jest znacznie “szybszy” ze
względu na ustalenie pewnych warunków i pozbycie się zbędnych
zależności geometrycznych.
Raycasting:
“Rzucanie“ promieni odbywa się w grupach, np. dla ekranu
100x100 wystarczy tylko 100 promieni
Proste kształty geometryczne
Metoda bardzo szybka, nie wymaga dużego nakładu pamięci
Raytracing:
Każdy promień śledzony jest osobno, co oznacza, że dla ściany
100x100 należy dokownać 104 operacji.
Prawie każdą figurę geometryczną można uzyskać
Metoda znacznie wolniejsza, wymagająca dużej liczby
obliczeń.
Marcin Majak Raycasting 6/30
7. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 19 listopada 2009
Plan prezentacji
1 Wprowadzenie
2 Początkowe ustalenia
3 Obliczanie odległości od obiektów
4 Ostateczny rezultat
5 Rysowanie podłogi
6 Rysowanie sufitu
Marcin Majak Raycasting 7/30
8. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 19 listopada 2009
Warunki wstępne
Wielkość gracza w stosunku do ścian i pole widzenia
Zakres śledzonych promieni
Wybierz układ współrzędnych aby później wykonywać
obliczenia zgodnie z przyjętą orientacją.
Głównym założeniem jest fakt, że ściany są zawsze
prostopadłe do podłogi.
Ustal wielkość ściany, na której będą prezentowane wyniki tgz.
“Projection Plane”.
Wybierz kąt widzenia gracza, jego położenie, wielkość i
odległość od “Projection Plane”.
Marcin Majak Raycasting 8/30
9. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 19 listopada 2009
Kilka wyjaśnień
Ogólne ustawienie gracza przed “Projection Plane”
Początkowe ustalenia:
Rozmiar ściany “Projection Plane”: 320x200 pixeli
Odległość gracza od “Projection Plane“: 277
Marcin Majak Raycasting 9/30
10. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 19 listopada 2009
Kilka wyjaśnień
Kąt pomiędzy poszczególnymi promieniami: 60/320◦
Pole widzenia gracza i rzucane promienie
Marcin Majak Raycasting 10/30
11. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 19 listopada 2009
Plan prezentacji
1 Wprowadzenie
2 Początkowe ustalenia
3 Obliczanie odległości od obiektów
4 Ostateczny rezultat
5 Rysowanie podłogi
6 Rysowanie sufitu
Marcin Majak Raycasting 11/30
12. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 19 listopada 2009
Obliczanie odległości DDA
Algorytm:
Na podstawie ustawienia gracza i kąta widzenia wydziel 30
promieni w lewą stronę i 30 w prawą stronę gracza.
Czekaj do momentu, gdy promień nie uderzy w przeszkodę.
Oblicz odległość aktualnego promienia od przeszkody.
Narysuj pionowe odcinki odwrotnie proporcjonalne do
obliczonej odległości zgodnie z zasadami perspektywy
przestrzennej. Im dalej nastąpiła kolizja ze ścianką labiryntu,
tym mniejszy powinien być pionowy pasek przedstawiający ten
fragment ścianki na wyświetlaczu telefonu.
Wyśrodkuj otrzymane paski względem linii horyzontu.
Marcin Majak Raycasting 12/30
13. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 19 listopada 2009
Obliczanie odległości DDA
Sposób obliczania odległości
Marcin Majak Raycasting 13/30
14. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 19 listopada 2009
Sprawdzanie kolizji w poziomie
Jak obliczyć poziome przecięcie z przeszkodą:
Sposób obliczania poziomego przecięcia
Marcin Majak Raycasting 14/30
15. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 19 listopada 2009
Sprawdzanie kolizji w poziomie
Znajdź pierwsze poziome(Y) przecięcie z komórką. Ustal znak
punktu w zależności od tego jak prowadzony jest promień.
Oblicz X przy użyciu formuły X = rozmiar komórki/ tan α
Sprawdź czy promień nie uderzył w przeszkodę, jeśli tak oblicz
odległość
Jeżeli nie ma przeszkody wylicz następne przecięcie
rozszerzając współrzędne Xnew = Xold + Xconst ,
Ynew = Yold + Yconst
Marcin Majak Raycasting 15/30
16. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 19 listopada 2009
Sprawdzanie kolizji w pionie
Jak obliczyć pionowe przecięcie z przeszkodą:
Sposób obliczania pionowego przecięcia
Marcin Majak Raycasting 16/30
17. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 19 listopada 2009
Sprawdzanie kolizji w pionie
Znajdź pierwsze pionowe(X) przecięcie z komórką. Ustal znak
punktu w zależności od tego jak prowadzony jest promień.
Oblicz Y przy użyciu formuły Y = rozmiar komórki · tan α
Sprawdź czy promień nie uderzył w przeszkodę, jeśli tak oblicz
odległość
Jeżeli nie ma przeszkody wylicz następne przecięcie
rozszerzając współrzędne Xnew = Xold + Xconst ,
Ynew = Yold + Yconst
Marcin Majak Raycasting 17/30
18. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 19 listopada 2009
Ostateczne oblicznie odległości
Marcin Majak Raycasting 18/30
19. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 19 listopada 2009
Ostateczne oblicznie odległości
Do obliczenia odległości między obserwatorem, a przeszkodą
bierzemy krótszy z promieni uzyskanych na poprzednich slajdach.
Kilka sposobów obliczenia ostatecznej odległości:
|P D| = |Px − Dx |/ cos α, |P E| = |Py − Ey |/ cos α
|P D| = (Px − Dx )2 + (Py − Dy )2 ,
|P E| = (Px − Ex )2 + (Py − Ey )2
Marcin Majak Raycasting 19/30
20. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 19 listopada 2009
Efekt rybiego oka
Aby pozbyć się efektu “Rybiego oka” należy nasze otrzymane
wcześniej wyniki przeskalować:
Poprawna odległość = Zniekształcona odległość · cos β (1)
Sposób jak pozbyć się tego efektu
RayCastingRybieOko.zip
Efekt rybiego oka
Marcin Majak Raycasting 20/30
21. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 19 listopada 2009
Plan prezentacji
1 Wprowadzenie
2 Początkowe ustalenia
3 Obliczanie odległości od obiektów
4 Ostateczny rezultat
5 Rysowanie podłogi
6 Rysowanie sufitu
Marcin Majak Raycasting 21/30
22. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 19 listopada 2009
Ostateczne wyrażenie do obliczenia wysokości przedmiotu
widzianego przez obserwatora:
HRzeczywiste
h= · DP rojectionP lane (2)
DP romienia
Jak wyliczyć ostateczną wysokość
Marcin Majak Raycasting 22/30
23. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 19 listopada 2009
Ostateczny efekt RayCastingPrzykladowyWynik.zip
Marcin Majak Raycasting 23/30
24. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 19 listopada 2009
Plan prezentacji
1 Wprowadzenie
2 Początkowe ustalenia
3 Obliczanie odległości od obiektów
4 Ostateczny rezultat
5 Rysowanie podłogi
6 Rysowanie sufitu
Marcin Majak Raycasting 24/30
25. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 19 listopada 2009
Rysowanie podłogi
Rysowanie podłogi należy rozpocząć od punktu, w którym kończy
się nasz Projection Plane. Formuła na wyliczenie pierwszego
przecięcia promienia z podłogą jest następująca:
Hgracza
odległość do P = · DP P (3)
HsrodekP P
Marcin Majak Raycasting 25/30
26. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 19 listopada 2009
Jak uzyskać prawidłowy wynik
Aby wyliczyć rzeczywistą odległość podłogi od oczu gracza należy
przeskalować otrzymany powyżej wynik:
odległość od P
Prawdziwa odległość = (4)
cos β
Sposób rysowania podłogi
Marcin Majak Raycasting 26/30
27. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 19 listopada 2009
Plan prezentacji
1 Wprowadzenie
2 Początkowe ustalenia
3 Obliczanie odległości od obiektów
4 Ostateczny rezultat
5 Rysowanie podłogi
6 Rysowanie sufitu
Marcin Majak Raycasting 27/30
28. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 19 listopada 2009
Rysowanie sufitu
Rysowanie sufitu jest podobne to omówionego wcześniej rysowania
podłogi. Również należy wyznaczyć początkową odległość
obserwatora od punktu przecięcia z sufitem.
Sposób rysowania sufitu RayCastingOkienko.zip
Marcin Majak Raycasting 28/30
29. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 19 listopada 2009
Kolejne spotkanie
Temat: Subversion - system kontroli wersji
Prowadzenie: Michał Walczak
Data: 26.11.2009, godzina: 17.00
Gdzie: sala 23 C-3
Marcin Majak Raycasting 29/30
30. Studenkie Koło Naukowe ISA2 Warsztaty programistyczne J2ME 19 listopada 2009
Więcej informacji
Kontakt z autorem:
164000@student.pwr.wroc.pl
Strona koła naukowego ISA2
http://autonom.ict.pwr.wroc.pl/
Strona warsztatów:
http://autonom.ict.pwr.wroc.pl/∼mstachniuk
Adres tego dokumentu:
http://autonom.ict.pwr.wroc.pl/∼mstachniuk/files/warsztaty2009/05-raycasting-2009.11.19.pdf
J2ME Tworzenie gier – Janusz Grzyb
ftp://ftp.helion.pl/online/j2metg/j2metg-3.pdf
Creating 2D Action Games with the Game API
http://developers.sun.com/mobility/midp/articles/game/
Wikipedia: Raycasting
http://pl.wikipedia.org/wiki/Ray casting
Strona z tutorial’em
http://www.permadi.com/tutorial/raycast/
NetBeans
http://www.netbeans.org/
Marcin Majak Raycasting 30/30