【发布时间】:2012-03-12 09:44:12
【问题描述】:
我是 DirectX 的新手,所以我对这项技术知之甚少。 我想重现 Photoshop 所做的相同渲染。我的意思是能够实时渲染多个图层(每个图层都有 alpha 贴图)。 有人告诉我 Photoshop 使用 DirectX/OpenGl。对于我的项目,我可以使用 DirectX。
我找到了这篇文章Direct3D rendering 2D images with "multiply" blending mode and alpha,它准确地解释了我想要做什么,但是这篇文章已经很老了,而且他使用了 D3D9。也许,现在有一种更简单/更快的方法可以使用 DirectX 11 和 Direct2D 创建相同的效果。
希望您在我开始任何事情之前给我一些建议。
谢谢。
编辑:我不知道我是否足够清楚,我不是要任何代码,只是为了一个方向:如果我应该使用 Direct2D 或 Direct3D 9/10/11。如果我必须对着色器进行编程......那么做这个项目最好的方法是什么?
【问题讨论】:
-
您是否应该使用硬件混合或着色器的多次绘制取决于您希望处理多少层,以及对此的要求。如果每一层对所有先前的结果进行加法/乘法/等操作是可以接受的,那么只需做一个非常基本的
SetTexture, Draw(quad)循环;如果您需要更复杂的混合,则需要为所有可能的混合模式设置一组着色器,每种模式至少需要两个纹理,也许更多。 -
@peachykeen 感谢您的评论。层数不受限制,操作非常基础,正如您所说的添加/乘法/alpha 混合。你会为此建议我什么技术?由于我只使用 2D 图像,我可以使用 Direct2D 吗?
-
由于您将在 D2D 或 D3D 中专门使用单个四边形,因此几乎没有性能差异。在这两者中,您将绑定一个或两个纹理,绘制到纹理并循环。它可能不一定很快,因为需要进行所有状态更改。如果您想要 GDI+ 互操作等,D2D 可能是一个不错的选择,但并不是说它会无缘无故地限制您的用户群(您不会获得性能提升或任何真正的好处)。只要您可以实现乒乓风格的渲染,也应该可以为其他模式提供任意 2 纹理着色器效果。
-
感谢您的建议。我会尝试使用 D2D,它似乎不太复杂。
标签: c++ graphics directx photoshop