2008-09-28 5 views
2

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

+0

Вы отпустили это в любом месте? Я борюсь с) изучением конверсии YUV-RGB и b) обучением Cg в одно и то же время. Мне бы хотелось посмотреть, что вы сделали. – moswald 2009-06-17 19:39:09

ответ

2

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

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

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

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

1

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

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