YUV преобразование через фрагментный шейдер - PullRequest
2 голосов
/ 28 сентября 2008

Я реализовал преобразование YUV в RGB с помощью фрагментного шейдера, написанного на языке шейдеров Nvidia. (Y, U и V хранятся в отдельных текстурах, которые объединяются с помощью мультитекстурирования в моем фрагментном шейдере). Он прекрасно работает под OpenGL, но под Direct3D я просто не могу заставить выходное изображение выглядеть правильно. Я начинаю подозревать, что Direct3D каким-то образом модифицирует сэмплы Y, U и V, прежде чем я получу возможность сделать свою конвертацию в YUV. Кто-нибудь знает, вносит ли Direct3D какие-либо изменения в значения, хранящиеся в текстурах, до запуска фрагментного шейдера и как их отключить>?

Ответы [ 2 ]

2 голосов
/ 08 октября 2008

Мы поняли это. :) В основном проблема заключалась в том, что, хотя наши уравнения YUV и RGB были правильными, мы не правильно отбирали данные V! Таким образом, никакие проблемы с уравнениями не помогли бы!

В конце я бы порекомендовал следующую стратегию для всех, кто пытается это сделать:

1) Установите значения R, G и B на значение Y. Вы должны получить изображение в градациях серого (поскольку Y содержит только яркость). 2) Затем установите R, G и B на U. Вы должны получить забавные цвета! 3) Наконец, установите R, G и B на V. Опять же, вы должны получить забавные цвета.

Кроме того, правильная нормализация значений имеет решающее значение. Посетите наш fourcc.org для обсуждения правильной нормализации YUV.

1 голос
/ 28 сентября 2008

Единственное, что приходит на ум, - это то, что текстуры в неподходящем формате (с низкой точностью или сжатые).

Можете ли вы описать, как вывод выглядит неправильно? Есть ли шанс получить правильный или неправильный скриншот?

...