我已经通过用 Nvidia 的着色器语言编写的片段着色器实现了 YUV 到 RGB 的转换。(Y、U 和 V 存储在单独的纹理中,这些纹理通过我的片段着色器中的多纹理组合在一起)。它在 OpenGL 下工作得很好,但在 Direct3D 下我无法让输出图像看起来正确。我开始怀疑 Direct3D 在我有机会进行 YUV 转换之前以某种方式修改了 Y、U 和 V 样本。有谁知道 Direct3D 是否在片段着色器运行之前对存储在纹理中的值进行任何修改以及如何禁用它们>?
dicroce
问问题
5605 次
2 回答
2
我们想通了。:) 基本上问题在于,虽然我们的 YUV 到 RGB 方程是正确的,但我们没有正确采样 V 数据!因此,再多的对方程式进行处理也无济于事!
最后,我会向任何尝试这样做的人推荐以下策略:
1) 将 R、G 和 B 设置为 Y 的值。你应该得到一个灰度图像(因为 Y 只包含亮度)。2) 接下来,将 R、G 和 B 设置为 U。你应该得到有趣的颜色!3) 最后将 R、G 和 B 设置为 V。同样,你应该得到有趣的颜色。
此外,正确标准化这些值也很关键。查看我们的fourcc.org,了解有关正确YUV 标准化的讨论。
于 2008-10-08T15:31:01.283 回答
1
想到的唯一建议是纹理格式不合适(低精度或压缩)。
你能描述一下输出看起来有什么问题吗?有机会出现正确与错误的屏幕截图吗?
于 2008-09-28T03:18:59.690 回答