.net 如何在WPF 3d中生成非模糊图像
我使用.net 如何在WPF 3d中生成非模糊图像,.net,wpf,image,3d,.net,Wpf,Image,3d,我使用Viewport3D和ModelVisual3D创建了一个带有图像的简单图像笔刷(我用JPG、PNG进行了尝试),但它显示图像模糊,但原始图像非常清晰 我不知道如何使它与原始质量的三维 我还尝试了一些2D解决方案,如RenderOptions.BitmapScalingMode和SnapsToDevicePixels,但似乎无法解决3D情况下的问题 有人遇到过这个问题或知道解决方法吗 下面是示例代码: <Window xmlns="http://schemas.microsoft.c
Viewport3D
和ModelVisual3D
创建了一个带有图像的简单图像笔刷(我用JPG、PNG进行了尝试),但它显示图像模糊,但原始图像非常清晰
我不知道如何使它与原始质量的三维
我还尝试了一些2D解决方案,如RenderOptions.BitmapScalingMode
和SnapsToDevicePixels
,但似乎无法解决3D情况下的问题
有人遇到过这个问题或知道解决方法吗
下面是示例代码:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window6" Height="600" Width="600">
<Window.Resources>
<MeshGeometry3D x:Key="Card1" Positions="-0.67,1,0 -0.67,-1,0 0.67,-1,0 0.67,1,0"
TextureCoordinates="0,0 0,1 1,1 1,0" TriangleIndices="0 1 2 0 2 3" />
</Window.Resources>
<DockPanel Height="600" Width="600">
<Viewport3D Width="415.67" x:Name="viewport" Margin="0,23.363,0,64.363" DockPanel.Dock="Left">
<Viewport3D.Camera>
<PerspectiveCamera x:Name="perCamera" x:Uid="perCamera" FieldOfView="60" Position="0,0,5" />
</Viewport3D.Camera>
<ModelVisual3D>
<ModelVisual3D.Content>
<Model3DGroup >
<GeometryModel3D Geometry="{StaticResource Card1}">
<GeometryModel3D.Material>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<ImageBrush ImageSource="images\card.png"/>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</GeometryModel3D.Material>
</GeometryModel3D>
</Model3DGroup>
</ModelVisual3D.Content>
</ModelVisual3D>
<!-- light -->
<ModelVisual3D>
<ModelVisual3D.Content>
<DirectionalLight Color="#FFFFFFFF" Direction="0,0,-1"/>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D>
</DockPanel>
大多数图形硬件要求纹理大小为2的幂次方(例如512x512像素)。据猜测,WPF首先将图片的大小“调整”为2的幂,然后将结果缩放到您需要的任何大小。从2的幂到所需的目标大小的缩放通常是通过强调速度而不是质量的算法来完成的(除非您做了其他指定,我没有看到上面的内容)
为了验证这个假设,我创建了一个尺寸都是二次幂的图形,然后以原始分辨率显示它。如果这是问题的根源,这应该可以最小化(甚至消除)问题。为图像元素使用
UseLayoutRounding=“True”
属性。图像元素没有名为UseLayoutRounding的属性。这也是一篇有趣的文章,可以加强您的评论