我已经通过用Nvidia的着色器语言编写的片段着色器实现了YUV到RGB的转换。 (Y,U和V存储在单独的纹理中,通过我的片段着色器中的多纹理组合)。它在OpenGL下工作得很好,但在Direct3D下,我无法让输出图像看起来正确。我开始怀疑Direct3D在我有机会进行YUV转换之前以某种方式修改Y,U和V样本。有没有人知道Direct3D是否在片段着色器运行之前对纹理中存储的值进行了任何修改以及如何禁用它们?>

有帮助吗?

解决方案

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

最后,我会为尝试这样做的人推荐以下策略:

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

此外,正确标准化值至关重要。查看我们的fourcc.org,了解正确的YUV规范化。

其他提示

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

你能描述输出看起来错误的方式吗?有没有机会获得正确与错误的截图?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top