2

我正在拼命地尝试使用最近邻采样将图像渲染到 WPF 中的 3D 表面上。下面是我目前拥有的一个例子,虽然很模糊。ImageBrush 具有 64x64 纹理。

示例图像。

我尝试过用从无到有的RenderOptions.BitmapScalingMode="NearestNeighbor"任何地方来Window装饰XAML ImageBrush。我尝试编写自定义像素着色器,但无法获得令人满意的结果。甚至似乎我无法从着色器代码中设置纹理采样器的过滤模式。我已经考虑过变通方法,例如自己放大源纹理,但这仍然会在它开始插入下一个像素的两个边缘留下伪影。

底线:有什么方法可以在 WPF 中对 3D 模型实现最近邻图像采样的效果?

4

1 回答 1

1

刚刚遇到同样的问题,这个线程中的答案提供了一种解决方法。

您可以将 VisualBrush 与 Image 一起使用,然后 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 互操作并通过SharpDX渲染场景。

于 2014-01-11T23:04:12.610 回答