質問

Nvidiaのシェーダー言語で記述されたフラグメントシェーダーを介してYUVからRGBへの変換を実装しました。 (Y、U、およびVは、フラグメントシェーダーのマルチテクスチャを介して結合される個別のテクスチャに格納されます) OpenGLの下ではうまく機能しますが、Direct3Dの下では出力画像を正しく見ることができません。 YUV変換を行う機会を得る前に、Direct3DがY、U、Vサンプルを何らかの形で変更しているのではないかと疑い始めています。フラグメントシェーダーが実行される前に、Direct3Dがテクスチャに保存された値を変更するかどうか、そしてそれらを無効にする方法を知っていますか?

役に立ちましたか?

解決

私たちはそれを理解しました。 :)基本的に問題は、YUVからRGBへの方程式は正しいものの、Vデータを適切にサンプリングしていないことでした!そのため、方程式をいじる必要はありませんでした!

最終的に、これを行おうとする人には次の戦略をお勧めします。

1)R、G、およびBをYからの値に設定します。グレースケールイメージを取得する必要があります(Yには輝度のみが含まれているため)。 2)次に、R、G、およびBをUに設定します。面白い色になります! 3)最後に、R、G、およびBをVに設定します。再び、面白い色が得られるはずです。

また、値を適切に正規化することも重要です。適切なYUV正規化については、fourcc.orgで確認してください。

他のヒント

頭に浮かぶ唯一の提案は、テクスチャが不適切な形式(低精度または圧縮)であることです。

出力が間違っているように見える方法を説明できますか?スクリーンショットが正しいか間違っているか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top