Неожиданно пришла идея — а что если сделать стерео отрисовку и посмотреть что получится на экране нового телевизора c пассивным 3D? Всегда относился к этой фиче скептически, но именно с поляризационной технологией смотреть киношки в 3D мне понравилось. Хотя, возможно на моё мнение повлиял удобный диван и вкусный кофе с молоком... Может быть :)
Итак, встроенный плеер умеет показывать стерео изображение из анаморфных вертикальной или горизонтальной стереопары. Значит кадрам придётся потесниться и влезть в максимальные для телевизора 1920 x 1080 с неизбежной потерей качества.
Считаем смещения от текущего угла поворота камеры на основе расстояния до её цели и половины расстояния между «глазами», настройку последнего лучше для теста повесить на клавиши. Строим обе матрицы вида и рисуем с их помощью кадры, которые затем соединяем на финальном изображении:
Итак, встроенный плеер умеет показывать стерео изображение из анаморфных вертикальной или горизонтальной стереопары. Значит кадрам придётся потесниться и влезть в максимальные для телевизора 1920 x 1080 с неизбежной потерей качества.
Используем:
- два RenderTarget-а для отрисовки кадров для левого и правого глаза, по одной из сторон в два раза меньше экрана
- реализацию направленной камеры с двумя матрицами вида
Считаем смещения от текущего угла поворота камеры на основе расстояния до её цели и половины расстояния между «глазами», настройку последнего лучше для теста повесить на клавиши. Строим обе матрицы вида и рисуем с их помощью кадры, которые затем соединяем на финальном изображении:
Подключаемся к телевизору по HDMI, включаем 3D и надеваем очки. Для демонстрации эти же кадры в режиме вычитания:
Кстати, оказалось что на телевизоре стерео всё-таки отображается чересстрочно. Значит можно написать шейдер, который будет на каждой второй строке отображать RenderTarget над основной отрисовкой без изменения пропорций кадров — потери в качестве уменьшатся и в телевизоре не понадобится что-то включать, но нагрузка на видеокарту соответственно ещё больше возрастёт.