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控制的图像总是“延伸”到网格的尺寸被映射到不变形的矩形三维网格。