Jakiś czas temu napisałem sobie program do tworzenia i anaglifów, podstawą jednego anaglifu są dwa zdjęcia. W odróżnieniu od dziesiątek programów robiących anaglify, które można znaleźć, mój program przy każdym wyświetlaniu tworzy anaglif od nowa, co pozwala korygować parametry w każdym czasie przy zachowaniu oryginalnych plików.

Możliwe, że kupię sobie monitor 3D i będę chciał wykorzystać jego możliwości.

Program wykorzystuje WinForms, a samo wyświetlanie zdjęć to wygenerowanie obiektu Bitmap o wielkości takiej, jak forma, namalowanie na min anaglifu i wyświetlenie za pomocą standardowej kontrolki Image osadzonej na formie pozbawionej ramki paska tytułu. Chciałbym się zorientować, jak dorobić obsługę wyświetlania na monitorach 3D.

Załóżmy, że mam takie zdjęcia źródłowe:
Dla oka lewego: L.png
Dla oka prawego: R.png

Jeżeli będzie to monitor z pasywnym 3D, to nie będzie żadnego problemu, wystarczy wygenerować taki obraz:
Interlace.png
Jak widać, powyższy obraz powstał z obu zdjęć, że wysokość została zmniejszona o połowę, a następnie obraz powstał z kolejnych linii naprzemiennie z lewego i prawego obrazu, co opiera się na założeniu, że w monitorach z pasywnym 3D po założeniu okularów, do jednego oka trafia obraz z parzystych linii, a do drugiego oka trafia obraz z aktywnych linii.

Inaczej sprawa wygląda z monitorami z aktywnym 3D. Załóżmy, że taki monitor pracuje z częstotliwością 120Hz, co oznacza, że wyświetla naprzemiennie "lewy" i "prawy" obraz z częstotliwością 60Hz. Wydaje się, że żeby prawidłowo wyświetlić obraz 3D, musiałbym wygenerować dwa zdjęcia i podmieniać je naprzemiennie synchronicznie z pracą monitora. Czy synchronicznym wyświetlaniem zajmuje się program, czy wystarczy podać gdzieś obydwa obrazy, a naprzemiennym wyświetlaniem zajmie się sterownik karty graficznej? W jaki sposób można to zrealizować w C#? Czy jest jednolity sposób dla większości monitorów z aktywnym 3D?

Jeżeli nie da się w C#/WinForms lub jest to mega trudne, to jak ten problem rozwiązać w Javie/Swing lub C++/Qt lub C#/Gtk#.