Oblicz trzy rogi trójkąta Fov, obróć je, aby były skierowane we właściwą stronę i tak dalej, a następnie wykonaj jedną z następujących czynności:
1) wykonaj test punkt w trójkącie dla wszystkich potencjalnych celów
2) obliczyć ramkę graniczną tego trójkąta i wykonać test punkt-trójkąt dla wszystkich potencjalnych celów w komórkach w tej ramce granicznej - będzie to bardzo prosty kod do debugowania
Podobne podejście polega na użyciu kwadratu zamiast siatki i wykonaniu na nim skrzyżowań. Jeśli dostęp do kafelków O (1) przyspiesza cię, to po prostu testowanie wszystkich komórek w granicach trójkąta fov dla wewnątrz trójkąta powinno być tak szybkie, aby było natychmiastowe. Gdy patrzysz na inne opcje, zakładam, że nie, i że O (1) faktycznie bierze ogromny koszt braku pamięci podręcznej, gdy rzucasz swoją pamięć podręczną. Możesz oczywiście spojrzeć na instrukcje pobierania wstępnego, aby opisać swój spacer po obwiedni ...
3) „zrasteryzuj” ten trójkąt i sprawdź komórki, które „maluje” - prawdopodobnie najbardziej wydajny kod, ale być może tylko nieznacznie, ponieważ spekuluję, że wszystkie są zdominowane przez czasy braków w pamięci podręcznej i zależą od tego, jak złożone są twoje komórki i jak zajmowane są komórki oni są.
Alternatywnym podejściem jest renderowanie pola widzenia na bitmapę poza ekranem, a następnie odczytanie wartości pikseli dla każdego z obiektów; nie można „odmiksować farby”, ale przy ograniczonej liczbie obiektów i ostrożnie wybierając farbę można wywnioskować, kto widział kto. Podejście to jest podobne do tego, ile gier sprawdza to, co kliknął użytkownik - rysują scenę poza ekranem, używając jednolitych kolorów dla obszarów trafień. Procesory graficzne są bardzo szybkie przy wypełnianiu trójkątów ...