3

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

4

2 回答 2

1

我尝试使用 CLSID_D2D1ColorMatrix 效果为位图着色,它确实有效,但性能非常糟糕(如果您需要每帧都这样做)。

如果颜色会发生很大变化,我可以缓存输出,但我喜欢在我的精灵的色调上做动画来做闪烁/损坏效果,所以缓存无济于事。

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

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

于 2012-07-10T22:43:43.950 回答
0

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

如果您愿意使用预览版 API:

它不如 XNA 的 SpriteBatch 方便,但使用 ID2D1DeviceContext::SetPrimitiveBlend() 设置您想要的混合类型(添加或源而不是 alpha 混合)然后您可以在图像顶部或下方绘制以模拟您的色调效果正在找。

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

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

最后,您可以获得ID2D1GpuTransform。它允许在 ID2D1GpuTransform 中设置像素着色器。这个变压器可以插入效果图中。

于 2011-12-24T11:47:52.833 回答