Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML] Rzucanie promieni (ray casting)

Ostatnio zmodyfikowano 2015-04-03 22:25
Autor Wiadomość
frogi16
Temat założony przez niniejszego użytkownika
[SFML] Rzucanie promieni (ray casting)
» 2015-04-03 16:51:41
Tworząc grę 2D napotkałem problem wymagający ode mnie sprawdzenia czy między dwoma punktami coś jest. Chodzi po prostu o to, czy biegnąca między nimi linia nie jest przerwana przez jakąś przeszkodę. O ile wiem coś takiego nazywamy rzucaniem promieni i próbowałem znaleźć jakiś algorytm w internecie, jednak ani polskie ani angielskie strony wiele nie pomogły (często znajdowałem opisy technik używanych lata temu w grach 3D...).
Stąd moje pytanie, jak coś takiego zrobić? Takich promieni byłoby kilkanaście / kilkadziesiąt na klatkę, więc musi to być dość szybkie. Przeszkody trzymam jako zbiór wierzchołków.  Aha, jeśli dobrze rozumiem ideę promieni to, jeśli jakaś przeszkoda rzeczywiście jest między tymi dwoma punktami, powinienem otrzymać punkt kolizji (koniec promienia).

Pozdrawiam i z góry dziękuję.
P-130006
Brunon3
» 2015-04-03 21:29:45
Ja bym to rozwiązał tak, że "rzucałbym" obiekt (punkt) w stronę w jaką ma biec promień, a następnie oczekiwałbym na kolizję. Jeżeli nastąpiłaby kolizja to pobierałbym pozycję końca promienia (punktu, o którym pisałem wcześniej) i wywoływałbym jakąś funkcję/metodę na obsługę takiego zdarzenia.

-BD.
P-130031
michal11
» 2015-04-03 21:36:29
Wydaje mi się, że wystarczy tutaj zastosować zwykłą funkcję liniową.
P-130033
frogi16
Temat założony przez niniejszego użytkownika
» 2015-04-03 21:38:17
Wydajność tego chyba byłaby minimalna, przy dwudziestu promieniach i dziesięciu przeszkodach o pięciu ścianach trzeba by sprawdzać kolizję tysiąc razy przed każdym przesunięciem tego punktu.

EDIT:
Funkcja liniowa, co masz na myśli? W jaki sposób wskaże mi ona punkt kolizji?
P-130034
michal11
» 2015-04-03 22:05:22
Rozrysuj sobie to będziesz widział.
Wyznaczasz współczynniki dla promienia i np dla ściany i sprawdzasz czy mają pkt przecięcia i czy mieści się on w danym przedziale.
Możesz też zamiast ściany obliczać dla jakiegoś pkt.
P-130036
frogi16
Temat założony przez niniejszego użytkownika
» 2015-04-03 22:25:46
Ok, poczytałem trochę i myślę że to może się udać. Pytanie tylko czy będzie to szybkie, jak napiszę to dam znać jak się sprawuje.

Gdyby ktoś miał inne pomysły to proszę pisać.
P-130039
« 1 »
  Strona 1 z 1