2010-04-21 59 views
3

我用Viewport3DModelVisual3D创建一个带图像的简单ImageBrush(我试过用JPG,PNG),但它显示图像模糊,但原始图像非常尖锐并且清楚。如何在WPF中制作非模糊图像3d

我不知道如何在3D原有的质量,使它成为...

我也试着像RenderOptions.BitmapScalingModeSnapsToDevicePixels一些2D解决方案,但在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

大多数图形硬件要求的纹理的大小为2(例如,512×512像素)的功率。猜测,WPF首先将图片大小调整为2的幂,然后将结果缩放为您需要的任何大小。从2的幂到所需目标大小的缩放通常使用强调速度而不是质量的算法来完成(除非您做了某些指定,否则我没有看到上述内容)。

为了测试这个假设,我会创建一个尺寸都为两个幂的图形,然后我会以完全原始分辨率显示它。如果这是问题的根源,则应该尽量减少(甚至消除)问题。

+0

另外一个有趣的帖子可以加强你的评论http://gamedev.stackexchange.com/questions/26187/why-are-textures-always-square-powers-of-two-what-if-they-arent – Andreas 2015-03-02 15:02:29

1

使用图像元素的UseLayoutRounding="True"属性。

+0

有对于图像元素没有名为UseLayoutRounding的属性。 – MC9000 2013-11-08 22:30:18