2008-09-28 75 views
2

我通過使用Nvidia着色器語言編寫的片段着色器實現了YUV到RGB的轉換。 (Y,U和V存儲在單獨的紋理中,通過片段着色器中的多重紋理進行組合)。它在OpenGL下工作良好,但在Direct3D下,我無法使輸出圖像看起來正確。我開始懷疑,在我有機會做YUV轉換之前,Direct3D以某種方式修改了Y,U和V採樣。有誰知道在片段着色器運行之前Direct3D是否對存儲在紋理中的值進行了修改,以及如何禁用它們?通過片段着色器進行YUV轉換

+0

你有沒有在任何地方發佈過?我正在努力:a)學習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

想到的唯一建議是紋理格式不正確(低精度或壓縮)。

您能描述輸出看起來錯誤的方式嗎?任何機會的正確與錯誤的截圖?