Jeśli korzystasz z OpenGL, sekcja 9 OpenGL FAQ: Transformacje opisuje dokładnie, jak to zrobić. I nie, nie wymaga śledzenia promieni, ponieważ jest to, co zrozumiałe, bardzo nieefektywny (ale wysokiej jakości) sposób na osiągnięcie tego.
9.170 Jak renderować lustro?
Oto, co mówi wpis FAQ, a przykładowy kod pokazuje:
- Skonfiguruj macierz widoku odbitego. Postępowanie w przypadku lusterek wyrównanych do osi wyjaśniono w drugim akapicie.
- Narysuj scenę
- Przywróć matrycę widoku i wyczyść bufor głębokości
- Renderuj ponownie scenę; rzeczywista geometria lustra w tej scenie powinna być półprzezroczysta lub całkowicie przezroczysta, aby można było przejść do poprzednio renderowanej lustrzanej sceny.
Oczywiście jest wiele miejsca na optymalizację. Podczas renderowania sceny odbitej prawdopodobnie powinieneś możliwie dużo wygładzania, ponieważ lustra są zwykle małe, a domyślne wygaszanie poza ekranem nie uruchamia się dla geometrii, która jest na ekranie, ale nie jest widoczna przez lustro. Możesz także renderować uproszczoną wersję sceny przez lustro. W celu uzyskania efektów i aby ukryć użytkownika przed zauważeniem obniżonej jakości, możesz zastosować moduł cieniujący (np. Rozmycie lub jasny / wyprany) podczas wykonywania lustrzanego renderowania.
Wyobrażam sobie, że jeśli używasz DirectX, procedura byłaby taka sama.