У меня ОЧЕНЬ простое трехмерное пространство, определенное в WPF, которое определяет один трехмерный прямоугольник и трехмерную камеру. 3D Rect имеет Материал VisualBrush, который отображает содержимое окна.
Он отлично работает (проекция хорошо заполняет доступную область), когда размер окна больше 960x550.
НО, ниже этого числа (и до тех пор, пока ширина окна значительно меньше его высоты) он оставляет пустое пространство справа от экрана. Буду признателен за любые советы или указания ...
Вот мой XAML:
<Grid x:Name="RootGrid">
<!--UI Stuff here-->
</Grid>
<Viewport3D x:Name="MyAnimatedObject" ClipToBounds="False">
<Viewport3D.Camera>
<PerspectiveCamera x:Name="myPerspectiveCamera" FieldOfView="60" Position="0,0,1"/>
</Viewport3D.Camera>
<ModelVisual3D>
<ModelVisual3D.Content>
<DirectionalLight Color="#FFFFFF" Direction="-0.5,-0.5,-0.5"/>
</ModelVisual3D.Content>
</ModelVisual3D>
<ModelVisual3D>
<ModelVisual3D.Content>
<DirectionalLight Color="#FFFFFF" Direction="0.5,-0.5,-0.5"/>
</ModelVisual3D.Content>
</ModelVisual3D>
<ModelVisual3D>
<ModelVisual3D.Content>
<GeometryModel3D x:Name="geometryModel3D">
<GeometryModel3D.Transform>
<Transform3DGroup>
<TranslateTransform3D/>
<ScaleTransform3D/>
<RotateTransform3D/>
<TranslateTransform3D/>
<TranslateTransform3D/>
</Transform3DGroup>
</GeometryModel3D.Transform>
<GeometryModel3D.Geometry>
<MeshGeometry3D
TriangleIndices="0 3 2 0 2 1"
TextureCoordinates="0,0 1,0 1,1 0,1"
Normals="0,0,1 0,0,1 0,0,1 0,0,1"
Positions="-1,-1,0 1,-1,0 1,1,0 1,1,0 -1,1,0 -1,-1,0"/>
</GeometryModel3D.Geometry>
<GeometryModel3D.Material>
<MaterialGroup>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<VisualBrush Visual="{Binding ElementName=RootGrid}" Stretch="Fill"/>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</MaterialGroup>
</GeometryModel3D.Material>
</GeometryModel3D>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D>
И код для динамического изменения размера 3D Rect здесь:
Private Sub MainWindow_SizeChanged(ByVal sender As Object, ByVal e As System.Windows.SizeChangedEventArgs) Handles Me.SizeChanged
Dim AspectRatio As Double = RootGrid.ActualWidth / RootGrid.ActualHeight
Dim CameraDistance As Double = AspectRatio / Math.Tan(30D * Math.PI / 180)
myPerspectiveCamera.Position = New Media3D.Point3D(0, 0, CameraDistance)
Dim points As New Media3D.Point3DCollection
With points
.Add(New Media3D.Point3D(0D - AspectRatio, 1, 0))
.Add(New Media3D.Point3D(AspectRatio, 1, 0))
.Add(New Media3D.Point3D(AspectRatio, -1, 0))
.Add(New Media3D.Point3D(0D - AspectRatio, -1, 0))
End With
CType(geometryModel3D.Geometry, Media3D.MeshGeometry3D).Positions = points
End Sub