Direct2D中的颜色衰减/着色

3

有人知道如何在使用Direct2D渲染时改变位图的颜色吗?使用Direct3D很简单,只需要指定不同的顶点颜色或者在使用精灵批处理时提供颜色即可。我想使用Direct2D实现这个功能。感谢任何帮助。

2个回答

1

我尝试使用CLSID_D2D1ColorMatrix效果来着色位图,它确实可以工作,但性能非常差(如果您需要每帧都这样做)。

如果颜色经常更改,我可以缓存输出,但我喜欢在我的精灵上进行闪烁/损坏效果的着色动画,因此缓存无法帮助。

我的下一步行动是将渲染器切换到D3D,并实现包括着色的SpriteBatch着色器(或者基于DirectX Tool Kit实现):

http://blogs.msdn.com/b/shawnhar/archive/2012/06/18/directx-tool-kit-is-now-on-codeplex.aspx


0

使用当前的API,在绘制图像上方绘制半透明几何图形是最简单的方法。

如果您愿意使用预览API:

虽然不如XNA的SpriteBatch方便,但是使用ID2D1DeviceContext :: SetPrimitiveBlend()设置所需的混合类型(加法或源覆盖Alpha混合),然后可以在图像上方或下方绘制以模拟您要查找的色调效果。

或者,您可以使用DImage的ID2D1Effects(D2D的新组件)使用内置效果或自定义效果来绘制图像。

DImage效果可以链接在一起形成“效果图”,类似于基于节点的着色器编辑器。

最后,您可以使用ID2D1GpuTransform。它允许在ID2D1GpuTransform中设置像素着色器。此转换器可以插入到效果图中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接