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





Единственное, что приходит в голову, это то, что текстуры имеют неподходящий формат (с низкой точностью или сжатый).
Можете ли вы описать, как результат выглядит не так? Есть ли шанс получить правильный или неправильный снимок экрана?
Мы разобрались. :) В основном проблема заключалась в том, что, хотя наши уравнения YUV в RGB были правильными, мы не производили правильную выборку данных V! Так что никакие эксперименты с уравнениями не помогли бы!
В конце концов, я бы порекомендовал следующую стратегию всем, кто пытается это сделать:
1) Установите для R, G и B значение Y. Вы должны получить изображение в оттенках серого (поскольку Y содержит только яркость). 2) Затем установите R, G и B на U. У вас должны получиться забавные цвета! 3) Наконец, установите R, G и B на V. Опять же, у вас должны получиться смешные цвета.
Кроме того, очень важна правильная нормализация значений. Посетите наш fourcc.org для обсуждения правильной нормализации YUV.
Вы это где-нибудь выпустили? Я борюсь с а) изучением преобразования YUV-RGB и б) одновременным изучением Cg. Я бы с удовольствием посмотрел на то, что вы сделали.