Я реализовал преобразование YUV в RGB через шейдер фрагмента, написанный на шейдерном языке Nvidia. (Y, U и V хранятся в отдельных текстурах, которые объединены посредством многократного текстурирования в моем шейдере фрагмента). Он отлично работает под OpenGL, но в Direct3D я просто не могу получить образы вывода правильно. Я начинаю подозревать, что Direct3D каким-то образом модифицирует образцы Y, U и V, прежде чем я получу шанс сделать свою конверсию YUV. Кто-нибудь знает, если Direct3D вносит какие-либо изменения в значения, хранящиеся в текстурах, до запуска шейдера фрагмента и как отключить их>?YUV Преобразование через фрагментарный шейдер
ответ
Мы выяснили. :) В основном проблема заключалась в том, что, хотя наши уравнения YUV для RGB были правильными, мы не правильно отбирали данные V! Таким образом, никакое количество фьюзинга с уравнениями не помогло бы!
В конце концов, я рекомендовал бы следующую стратегию для тех, кто пытается сделать это:
1) Комплект R, G и B до значения от Y. Вы должны получить изображение в оттенках серого (как содержит Y просто яркость). 2) Затем установите R, G и B в U. Вы должны получить забавные цвета! 3) Наконец, установите R, G и B на V. Снова, вы должны получить смешные цвета.
Кроме того, правильная нормализация значений имеет решающее значение. Проверьте наш сайт fourcc.org для обсуждения правильной нормализации YUV.
Единственное, что приходит на ум, состоит в том, что текстуры находятся в несоответствующем формате (с низкой точностью или сжатым).
Можете ли вы описать, каким образом результат выглядит неправильно? Есть ли вероятность правильного скриншота?
Вы отпустили это в любом месте? Я борюсь с) изучением конверсии YUV-RGB и b) обучением Cg в одно и то же время. Мне бы хотелось посмотреть, что вы сделали. – moswald 2009-06-17 19:39:09