【问题标题】:Nearest-neighbor image sampling in 3D WPF3D WPF 中的最近邻图像采样
【发布时间】:2012-10-23 15:03:19
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# .net wpf 3d render


    【解决方案1】:

    刚刚遇到同样的问题,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 渲染场景。

    【讨论】:

      猜你喜欢
      • 2010-09-06
      • 2021-04-15
      • 1970-01-01
      • 1970-01-01
      • 2017-06-11
      • 2012-04-24
      • 2019-11-28
      • 2014-11-15
      • 1970-01-01
      相关资源
      最近更新 更多