2010-11-12 71 views
2

我試圖託管在一個Viewport2DVisual3D表面的WPF的形​​式。我已經設置了相機,以便控件符合窗口的寬度。默認的幾何圖形將整個窗體映射到一個正方形的面上,所以有必要進行某種形式的變換以使曲面看起來像普通的二維窗體,而不是垂直拉伸。整體形式看起來不錯,但文字不能很好地擴展,它是模糊的,塊狀的,並且以不同的方式看起來很糟糕。這是我一直在努力,設定縱橫比:Viewport2DVisual3D在WPF文字模糊控制

  • 一個ScaleTransform3D
  • 設置網格定位到合適的寬高比
  • 的TextureCoordinates設置到適當的長寬比

的前兩個讓我得到我想要的結果,除了塊狀/模糊的文本。我的結論是,字體渲染髮生在表單圖像被投影到3d表面之後發生縮放,所以無論如何它都會看起來很糟糕。有沒有人知道解決這個問題的方法或從一開始就設置它的方法?我不知道很多關於3D圖形,剛夠基本的數學讓相機角度權等

曾在Win 7和XP下測試。

一些我使用的資源:

代碼的幾個片段:

<Viewport2DVisual3D.Geometry> 
    <MeshGeometry3D x:Name="FrontFaceGeometry"        
     Positions="-1,1,0 -1,-1,0 1,-1,0 1,1,0" 
     TextureCoordinates="0,0 0,1 1,1 1,0" 
     TriangleIndices="0 1 2 0 2 3"/> 
</Viewport2DVisual3D.Geometry> 

...

<Grid Width="500" x:Name="FrontFaceGrid"> 

然後在Window_Loaded例程,例如

var aRatio = FrontFaceGrid.ActualHeight/FrontFaceGrid.ActualWidth; 
FrontFaceGeometry.Positions[0] = new System.Windows.Media.Media3D.Point3D(-1, aRatio, 0); 
FrontFaceGeometry.Positions[1] = new System.Windows.Media.Media3D.Point3D(-1, -aRatio, 0); 
FrontFaceGeometry.Positions[2] = new System.Windows.Media.Media3D.Point3D(1, -aRatio, 0); 
FrontFaceGeometry.Positions[3] = new System.Windows.Media.Media3D.Point3D(1, aRatio, 0); 
+0

您正在使用什麼版本的.NET的? – 2010-11-12 17:32:21

+0

我在.NET 4.0上。 – flatline 2010-11-12 18:12:37

+0

你試過SnapsToDevicePixels =「True」 – 2012-11-05 06:09:49

回答

0

你會被渲染WPF形式到廣場上的紋理,然後顯示使用GPU的紋理引擎平方。根據紋理引擎使用的模式,這可能導致塊狀或模糊(因爲紋理引擎默認會嘗試插入紋理)。

你爲什麼想用3D視覺,而不是正常,如果是爲了填滿屏幕來呈現呢?

+0

我想在兩種形式之間執行3d轉換。具體而言,我的意圖是翻轉y軸上的形式(假設z軸面向您),以揭示背部的另一種形式。在WPF中烘焙出的三維物體在第一次腮紅時讓人感到非常輕鬆,我只是希望它能夠在縮放時看起來更清潔。 – flatline 2010-11-12 19:26:30

+0

正常顯示錶格,只是使用3D進行轉換。 – 2010-11-13 08:00:52

3

爲了避免模糊文字等視覺扭曲使得3D XY縱橫比等於2D控制縱橫比。這通過設置X和Y MeshGeometry3D.Positions來實現。例如,2D控制尺寸在500X700可以通過分配位置

<Viewport2DVisual3D.Geometry> 
    <MeshGeometry3D x:Name="FrontFaceGeometry"        
     Positions="-2.5,3.5,0 -2.5,-3.5,0 2.5,-3.5,0 2.5,3.5,0" 
     TextureCoordinates="0,0 0,1 1,1 1,0" 
     TriangleIndices="0 1 2 0 2 3"/> 
</Viewport2DVisual3D.Geometry> 

在3D環境內顯示的2D控制的圖像總是「延伸」到網格的尺寸被映射到不變形的矩形三維網格。