Я пытаюсь разместить форму WPF на поверхности Viewport2DVisual3D. Я настроил камеру так, чтобы элементы управления соответствовали ширине окна. Геометрия по умолчанию отображает всю форму на квадратную грань, поэтому необходимо выполнить какое-то преобразование, чтобы поверхность выглядела как обычная 2d форма и не выглядела растянутой по вертикали. Форма в целом выглядит хорошо, но текст плохо масштабируется, он размытый и блочный и выглядит по-разному от строки к строке. Вот что я пытался установить соотношение сторон:
- A ScaleTransform3D
- Настройка сетки для правильного соотношения сторон
- Установка текстурных координат для правильного соотношения сторон
Первые два дают мне результаты, которые я хочу, за исключением блочного / размытого текста. В этот момент я пришел к выводу, что рендеринг шрифта происходит до того, как изображение формы проецируется на трехмерную поверхность, а затем происходит масштабирование, поэтому оно будет выглядеть плохо, несмотря ни на что. Кто-нибудь знает способ обойти это или настроить его с самого начала? Я не очень разбираюсь в трехмерной графике, просто достаточно математики, чтобы правильно настроить угол обзора камеры и т. Д.
Протестировал на 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);