通过片段着色器进行YUV转换

问题描述:

我通过使用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

我们知道了。 :)基本上问题是,虽然我们的YUV到RGB方程是正确的,但是我们没有正确地采样V数据!所以没有任何方法可以帮助!

最后,我建议以下策略,任何人试图做到这一点:

1)将R,G和B的值从Y.你应该得到的灰度图像(如Y包含只是亮度)。 2)接下来,将R,G和B设置为U.您应该看到有趣的颜色! 3)最后设置R,G和B为V.再次,你应该得到有趣的颜色。

另外,对这些值进行正确归一化至关重要。请查看我们的fourcc.org,了解适当YUV标准化的讨论。

想到的唯一建议是纹理格式不正确(低精度或压缩)。

您能描述输出看起来错误的方式吗?任何机会的正确与错误的截图?