代码之家  ›  专栏  ›  技术社区  ›  flatline

WPF控件上的Viewport2DVisual3D模糊文本

  •  2
  • flatline  · 技术社区  · 14 年前

    • ScaleTransform3D
    • 将网格位置设置为适当的纵横比

    前两个得到我想要的结果,除了块状/模糊的文本。在这一点上,我的结论是,字体渲染是在表单图像投影到三维曲面上,然后缩放发生之前发生的,因此无论发生什么,它看起来都很糟糕。有没有人知道如何解决这个问题,或者从一开始就进行设置?我对3d图形了解不多,只知道足够的基本数学来确定相机的角度等等。

    已经在Win7和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">
    

    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);
    
    2 回复  |  直到 14 年前
        1
  •  3
  •   Rana Ian    13 年前

    为避免文本模糊和其他视觉扭曲,请使三维XY纵横比等于二维控制纵横比。这是通过设置X和Y MeshGeometry3D.Positions来实现的。例如,大小为500x700的2D控件可以通过指定位置映射到矩形3D网格而不失真

    <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控件的图像始终“拉伸”到网格的尺寸。

        2
  •  0
  •   Jackson Pope    14 年前