有没有人想过如何在使用Direct2D渲染时更改位图的颜色?使用Direct3D,只需指定不同的顶点颜色,或者在使用精灵批处理时提供颜色。我想用Direct2D做到这一点。提前感谢您的帮助。
答案 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中设置像素着色器。该变压器可以插入效果图。