2

我正在使用 Silverlight 进行一些与游戏相关的渲染,当我将像素着色器附加到具有(旋转)变换的图像时,我看到了一种奇怪的、模糊的像素化效果。

这是问题的屏幕截图。左边的图像只是一个变换。右边的图像有一个变换和一个像素着色器。


(来源:andrewrussell.net

您可以在我的博客上看到这一点(单击 Silverlight 控件以添加像素着色器)。

有问题的像素着色器是 SilverSprite 中用于着色图像颜色的像素着色器。你可以在这里查看它的源代码

我正在应用的转换是MatrixTransform(带有手动计算的平移、缩放、旋转矩阵)。旋转图像时出现问题。

着色器和变换都应用于的元素Image是添加到Canvas代码中的元素。图像ImageSource是 aWriteableBitmap但效果也发生在 a 上BitmapImage

我的问题是:是什么导致了这种模糊的像素化?可以做些什么来减少或消除它

4

1 回答 1

2

在观看了 PDC09 的演示后,我对 Silverlight 中的渲染系统的工作原理有了更好的了解。演示文稿并未直接解决此问题,但了解事物的呈现顺序会有所帮助。

与我的问题相关的渲染步骤的顺序是:渲染对象的子项(和/或自身),该渲染通过.Effect然后通过RenderTransform.

似乎在任何情况下,将 aRenderTransform应用于该对象或其子对象已应用的对象Effect(即:在渲染树RenderTransform中出现在 a之后的a ),这是以“低质量”模式完成的,从而产生这个“模糊性”。EffectRenderTransform

因此,解决方案是将Effect移到之后RenderTransform。在我的情况下,这意味着将 单独Image应用Canvas,将 应用RenderTransformImage,然后将应用EffectCanvas

于 2010-08-14T12:54:47.787 回答