既然<BevelBitmapEffect>
(以及其他效果)已被折旧,我想看看如何在着色器效果中重新创建完全相同的东西(包括BevelWidth
的属性, EdgeProfile
,LightAngle
,Relief
和Smoothness
)。
我对像素着色很熟悉,大多数只是Shazzam中整个图像/元素的颜色处理,但是如何创建斜角使我望而却步。这是一个顶点着色器,如果是这样,我将如何开始?我已经对此进行了高调和低调,但似乎无法找到一些信息,这些信息可以让我开始在自定义<BevelBitmapEffect>
中复制Effect
。
或者,根据下面的评论,这是WPF中的3D,如果有的话,是否有代码库用于重新创建模仿WPF以前版本的<BevelBitmapEffect>
?
答案 0 :(得分:4)
Rod Stephens在DevX上发表了一篇很棒的文章,展示了如何使用System.Drawing创建WPF效果(以前存在的效果,如Bevel)等等。你必须注册才能查看这篇文章,它位于http://www.devx.com/DevXNet/Article/45039。可下载的源代码。
答案 1 :(得分:2)
要创建斜角,您需要知道每个像素距边缘的距离(在所有方向搜索,直到alpha = 0)。从这里你可以calculate the normal然后遮阴(参见silverlight示例)。正如您所提到的,关于斜面的内容并不多,但如果您搜索着色相似的凹凸贴图/法线贴图,则会有一些很好的资源。特别是this thread使用预先计算的法线贴图的Silverlight示例。
要在硬件中做所有事情,理想情况下你会使用多遍着色器,WPF的内置效果是多遍的,但它不允许你自己编写。 要解决此限制:
如果不执行其中一项操作,您很幸运能够在达到指令限制之前执行3或4像素斜角,因为找到距离所需的循环会快速增加指令计数。
Download。这是一个使用PixelShader 3.0的示例。它使用一个着色器查找到边缘的距离(也称为高度),另一个(基于nvidia phong shaders)用于遮蔽它。通过使用代码调整输入高度来创建斜面轮廓,或者可以通过提供特殊纹理来使用自定义轮廓。还有一些其他功能需要添加,但它似乎很容易高效地为属性设置动画。它缺乏评论,但我可以在需要时解释部分。