2010-04-21 23 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