Direct2D中的颜色衰减/色调

时间:2011-02-25 03:12:11

标签: colors direct2d tint

有没有人想过如何在使用Direct2D渲染时更改位图的颜色?使用Direct3D,只需指定不同的顶点颜色,或者在使用精灵批处理时提供颜色。我想用Direct2D做到这一点。提前感谢您的帮助。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

如果您愿意使用预览API:

它不像XNA的SpriteBatch那么方便,但是使用ID2D1DeviceContext :: SetPrimitiveBlend()来设置你想要的混合类型(添加剂或源到alpha混合)然后你可以在图像的顶部或下面绘制来模拟你正在寻找的色彩效果。

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

DImage效果可以从“效果图”链接到一起,思考基于节点的着色器编辑器。

最后,您可以使用ID2D1GpuTransform。它允许在ID2D1GpuTransform中设置像素着色器。该变压器可以插入效果图。