使用DirectX(2D)创建多层渲染

Create multi-layer rendering using DirectX (2D)

本文关键字:创建 DirectX 2D 使用      更新时间:2023-10-16

我是DirectX的新手,所以我对这项技术了解不多。我想重现photoshop正在做的相同渲染。我的意思是能够实时渲染几个层(每个层都有alpha贴图)。有人告诉我photoshop使用DirectX/OpenGl。对于我的项目,我可以使用DirectX。

我发现这个后Direct3D渲染2D图像与";乘";混合模式和alpha,这正好解释了我想做什么,但这篇文章很旧,他使用了D3D9。也许,现在有一种更简单/更快的方法可以使用DirectX 11和Direct2D创建相同的效果。

在我开始做任何事情之前,我希望你能给我一些建议。

谢谢。

编辑:我不知道我是否足够清楚,我没有要求任何代码,只是为了一个方向:我是否应该使用Direct2D或Direct3D 9/10/11。如果我必须对着色器进行编程。。。做这个项目最好的办法是什么?

根据您正在寻找的性能,D3D或D2D会更合适。D3D是一种更为保留的模式,因此使用起来更为复杂的API,但如果性能绝对值得关注的话,这正是您想要的。D2D API是更直接的模式,但这当然会导致更简单的API和更慢的性能。

根据我的经验,我会从D2D开始,特别是因为新的D2D API,如ID2D1DeviceContext::DrawImage()和ID2D1Effect支持许多混合和复合模式。D2D与D3D的相互操作非常好,因此在未来,如果需要,您可以使用D3D的部分。D2D还提供了一个非常好的界面来支持打印,因此可以使用相同的渲染代码进行打印。

如果您使用的是当前发布的Direct2D版本(而不是Win8预览中的更新版本),则可以实现与alpha掩码的"OVER"(也称为"Normal")混合。将内容渲染为PBGRA32位图,然后将遮罩(如果需要)渲染为Alpha8位图。然后,从内容位图创建位图笔刷,并使用ID2D1RenderTarget::FillOpcityMask()。如果不需要遮罩,那么只需使用DrawBitmap()并跳过位图笔刷。

要实现任何额外的混合模式,你需要更新的Direct2D,在Windows 8发布之前,它不会对所有人都可用(我认为它也适用于Win7)。或者,当然,你可以在软件模式下完成,但你必须从头开始实现一切。