Nvidia のシェーダー言語で記述されたフラグメント シェーダーを介して、YUV から RGB への変換を実装しました。(Y、U、および V は、フラグメント シェーダーのマルチ テクスチャリングを介して結合される個別のテクスチャに格納されます)。OpenGL では問題なく動作しますが、Direct3D では出力イメージを正しく表示できません。YUV 変換を行う機会を得る前に、Direct3D が Y、U、および V サンプルを何らかの形で変更しているのではないかと疑い始めています。フラグメント シェーダーが実行される前に、Direct3D がテクスチャに格納されている値を変更するかどうか、およびそれらを無効にする方法を知っている人はいますか?
5605 次
2 に答える
2
私たちはそれを理解しました。:) 基本的に問題は、YUV から RGB への式が正しい一方で、V データを適切にサンプリングしていなかったことです! したがって、方程式をいじっても役に立ちませんでした。
最後に、これを行おうとしている人には次の戦略をお勧めします。
1) R、G、および B を Y の値に設定します。グレースケール イメージが得られるはずです (Y には輝度のみが含まれるため)。2) 次に、R、G、B を U に設定します。面白い色が得られるはずです。3) 最後に、R、G、B を V に設定します。これも面白い色になるはずです。
また、値を適切に正規化することも重要です。適切な YUV 正規化については、fourcc.org を参照してください。
于 2008-10-08T15:31:01.283 に答える
1
頭に浮かぶ唯一の提案は、テクスチャが不適切な形式 (低精度または圧縮) であるということです。
出力がどのように間違っているか説明できますか? 正しいスクリーンショットと間違ったスクリーンショットの可能性はありますか?
于 2008-09-28T03:18:59.690 に答える