我们在 WPF 中使用 aD3DImage
在 WPF 中创建的背景上显示使用 Direct3D 呈现的部分透明的 3D 内容。所以,我们有这样的事情:
<UserControl Background="Blue">
<Image>
<Image.Source>
<D3DImage .../>
</Image.Source>
</Image>
</UserControl>
现在,我们遇到了抗锯齿边缘无法正确显示的问题。我们在某些边缘得到某种白色“发光”效果,类似于第一张图片中显示的文本周围的效果:
(取自http://dvd-hq.info/alpha_matting.php)
原因是我们从 DirectX 获得的数据显然没有与 alpha 通道进行预乘。但是 WPF 和D3DImage
期望这是他们的输入(参见CodeProject 上的“D3DImage 简介”,“A Brief Look at D3D Interop Requirements”一节)。
我通过在 C# 中将每个像素乘以其 alpha 值并使用自定义像素着色器来验证这实际上是问题所在。结果都很好。但是,我想直接从 DirectX 获得这个结果。
如何直接从 DirectX 获取预乘数据?我可以在调用中以某种方式指定它CreateRenderTarget
吗?我不是 DirectX 专家,所以如果解决方案可能很明显,请原谅......