C# WP3和3D如何使用VisualBrush填充视口3D?
我在WPF中定义了一个非常简单的3D空间,它定义了一个3D矩形和一个3D相机。3D矩形有一个可视化画笔材质,用于描绘窗口的内容。 当窗口大小大于960x550时,它工作正常(投影很好地填充了可用区域)。 但是,在这个数字以下(只要窗口的宽度远小于它的高度),它会在屏幕右侧留下一个空白。如果您有任何建议或指示,我将不胜感激 这是我的XAML:C# WP3和3D如何使用VisualBrush填充视口3D?,c#,wpf,vb.net,math,3d,C#,Wpf,Vb.net,Math,3d,我在WPF中定义了一个非常简单的3D空间,它定义了一个3D矩形和一个3D相机。3D矩形有一个可视化画笔材质,用于描绘窗口的内容。 当窗口大小大于960x550时,它工作正常(投影很好地填充了可用区域)。 但是,在这个数字以下(只要窗口的宽度远小于它的高度),它会在屏幕右侧留下一个空白。如果您有任何建议或指示,我将不胜感激 这是我的XAML: <Grid x:Name="RootGrid"> <!--UI Stuff here--> </Gri
<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>
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