我拼命尝试使用最近邻采样将图像渲染到 WPF 中的 3D 表面上。以下是我目前拥有的所有模糊示例。 ImageBrush 被赋予一个 64x64 纹理。
我尝试用 RenderOptions.BitmapScalingMode="NearestNeighbor"
从 Window
到 ImageBrush
装饰 XAML,但没有成功。我试过编写自定义像素着色器,但无法获得令人满意的结果。甚至似乎我无法从着色器代码中设置纹理采样器的过滤模式。我考虑过变通方法,例如自己放大源纹理,但这仍然会在开始插值到下一个像素的两个边缘处留下伪影。
底线:有什么方法可以在 WPF 中的 3D 模型上实现最近邻图像采样的效果?
最佳答案
刚遇到同样的问题,答案在this thread提供了解决方法。
您可以将 VisualBrush 与图像一起使用,然后 WPF 将遵守图像上的 BitmapScalingMode。您还可以设置 CachingHint(也在 RenderOptions 上),这可能会提高性能(虽然没有测量)。
var image = new Image { Source = new BitmapImage(new Uri("pack://application:,,,/Resources/image.png")) };
RenderOptions.SetCachingHint(image, CachingHint.Cache);
RenderOptions.SetBitmapScalingMode(image, BitmapScalingMode.NearestNeighbor);
var material = new DiffuseMaterial(new VisualBrush(image));
这适用于简单的场景,正如我所说的,我没有衡量性能,但我想 VisualBrush 会伤害更大的东西(与 ImageBrush 相比)。我个人会切换到 Direct3D interop并通过 SharpDX 渲染场景当我遇到那个问题时。
关于c# - 3D WPF 中的最近邻图像采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13203959/