Je tente d'héberger un formulaire WPF sur une surface Viewport2DVisual3D. J'ai mis en place l'appareil photo de sorte que les contrôles correspondent à la largeur de la fenêtre. La géométrie par défaut mappe le formulaire entier sur une face carrée, il est donc nécessaire de faire une sorte de transformation pour que la surface ressemble à une forme 2d normale et ne pas apparaître étirée verticalement. La forme semble correcte dans l'ensemble, mais le texte ne se met pas bien à l'échelle, il est flou et bloc et semble mauvais de différentes manières d'une ligne à l'autre. Voici ce que j'ai essayé de régler le rapport d'aspect:Texte flou Viewport2DVisual3D sur les contrôles WPF
- A ScaleTransform3D
- Réglage du maillage Positions au format approprié
- Réglage des TextureCoordinates au rapport d'aspect approprié
Le les deux premiers me donnent les résultats que je veux, sauf pour le texte blocky/flou. Ma conclusion à ce stade est que le rendu de la police se produit avant que l'image du formulaire ne soit projetée sur la surface 3D et que la mise à l'échelle se produise, donc cela semblera mauvais quoi qu'il arrive. Est-ce que quelqu'un sait un moyen de contourner cela ou de le mettre en place dès le début? Je ne connais pas beaucoup les graphismes en 3D, juste assez de maths de base pour obtenir les angles de caméra à droite, etc.
Avoir testé sur Win 7 et XP.
Certaines des ressources que j'ai utilisé:
- http://www.codeproject.com/KB/WPF/ContentControl3D.aspx
- http://pavanpodila.spaces.live.com/blog/cns!9C9E888164859398!151.entry
Quelques extraits du code:
<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">
Ensuite, dans la routine Window_Loaded, par ex.
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);
Quelle version de .NET utilisez-vous? –
Je suis sur .NET 4.0. – flatline
Avez-vous essayé SnapsToDevicePixels = "Vrai" –