Chcę mieć oświetlenie 2D, które mogą być blokowane przez obiekty w grze. Moja gra ma widok z góry, a wszystkie obiekty w grze są opisane prostokątami.
Powiedzmy, że mam świat 10x10 i umieszczam światło na 1x1 i ściany wokół tego światła. Chcę widzieć źródło światła na 1x1, ale nigdzie indziej, ponieważ jest zablokowane przez ściany.
Słyszałem o rzucaniu promieni świetlnych, ale jak to naprawdę działa?
opengl
2d
lighting
raycasting
LiquidFeline
źródło
źródło
Odpowiedzi:
Amit Patel napisał bardzo fajny artykuł na temat odlewania promieniami 2D.
Polega to na rzucaniu promieniami na każdy z wierzchołków w zasięgu źródła światła, aby zbudować lekką siatkę.
Wszystkie wizualne przykłady są interaktywne w poście i bardzo łatwe do zrozumienia.
Nie musisz też ograniczać się do pudełka, którego obwód może mieć dowolny kształt.
źródło
Powinieneś użyć algorytmu raycasting , co oznacza, że powinieneś być w stanie obliczyć przecięcie promienia (pół linii) z dowolnym obiektem w scenie (linie, kwadraty, koła, trójkąty ....) i wybrać najbliższe przecięcie. Rzucasz promień we wszystkich kierunkach, a następnie „przyciągasz światło” tylko do najbliższego obiektu.
Oto jak może to wyglądać .
źródło
Jeśli wiesz, co to jest rzutowanie promieniami, wszystko, co musisz naprawdę zrobić, to na stałe go zakodować. Nie jest to zbyt skomplikowane, o ile masz współrzędne dla każdego wierzchołka.
Najpierw utwórz obiekt emitujący światło. Umieść swoje światło na współrzędnych x, y.
Nie gwarantuje się, że zadziała w przypadku wielokąta wklęsłego, ale powinno działać dobrze w przypadku dowolnych wielokątów wypukłych.
Działa to, jeśli obiekty okluzji (ściany, postać, latający purpurowy zjadacz ludzi) zostaną namalowane na ekranie po zastosowaniu oświetlenia. W przeciwnym razie połowa ściany będzie wydawać się znacznie jaśniejsza niż druga połowa. Jeśli światło punktowe jest w równej odległości od dwóch par wierzchołków tej samej ściany (dokładnie o połowę wysokości wysokości ściany), zastosuj trójkąt do dwóch najbliższych wierzchołków, a nie dwóch dalej.
Powinienem również wspomnieć, że ta metoda wymaga dynamicznie tworzonego punktu wierzchołka, w którym krawędź promienia światła styka się z powierzchnią obiektu zamykającego.Tworzy to co najmniej 3 wierzchołki dla każdego obiektu zasłaniającego i pozwoli ścianom, które wystają poza promień światła (lub poza ekranem), również blokować każde światło.
Więcej informacji o wielokątach wklęsłych i wypukłych
źródło