我有一个包含图像的Viewport3D,下面是我的代码:
<Window>
<Window.Resources>
<MaterialGroup x:Key="mat1" >
<DiffuseMaterial >
<DiffuseMaterial.Brush >
<VisualBrush >
<VisualBrush.Visual >
<Grid Width="270" Height="638" Background="Red">
<Image Width="270" Height="638" Source="screenshot-1.Png"></Image>
</Grid>
</VisualBrush.Visual >
</VisualBrush >
</DiffuseMaterial.Brush >
</DiffuseMaterial >
</MaterialGroup>
</Window.Resources >
<Grid>
<Viewport3D x:Name="vp" UIElement.ClipToBounds ="False" Height="638" UIElement.IsHitTestVisible ="False" RenderOptions.EdgeMode ="Unspecified" >
<Viewport3D.Camera >
<PerspectiveCamera x:Name="camera" ProjectionCamera.Position="0,0,5" ProjectionCamera.LookDirection ="0,0,-1" PerspectiveCamera.FieldOfView ="28" />
</Viewport3D.Camera>
<Viewport3D.Children >
<ModelVisual3D >
<ModelVisual3D.Content >
<SpotLight PointLightBase.Position="0,0,30" SpotLight.Direction ="0,0,-1" Light.Color ="white" />
</ModelVisual3D.Content>
</ModelVisual3D>
<ModelVisual3D >
<ModelVisual3D.Content >
<GeometryModel3D x:Name="gm3d" Material="{StaticResource mat1}" >
<GeometryModel3D.Geometry >
<MeshGeometry3D x:Name="plane3d" MeshGeometry3D.Normals ="0,0,1 0,0,1 0,0,1 0,0,1 0,0,1 0,0,1" MeshGeometry3D.TextureCoordinates ="0,1 1,1 1,0 1,0 0,0 0,1" MeshGeometry3D.Positions ="-1,-1,1 1,-1,1 1,1,1 1,1,1 -1,1,1 -1,-1,1" />
</GeometryModel3D.Geometry>
<Model3D.Transform >
<RotateTransform3D >
<RotateTransform3D.Rotation >
<AxisAngleRotation3D AxisAngleRotation3D.Axis="0,1,0" AxisAngleRotation3D.Angle ="0" x:Name ="rAngle" />
</RotateTransform3D.Rotation>
</RotateTransform3D>
</Model3D.Transform>
</GeometryModel3D>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D.Children>
</Viewport3D>
<Button Height="20" Width="30" VerticalAlignment="Top" HorizontalAlignment="Left" Click="Button_Click_2"></Button>
</Grid>
</Window>
问题是图像大小应该是这样的:
但是,在使用Viewport3D时,如下所示:
有人能帮我吗?
发布于 2013-11-10 17:04:21
对此的简单解释是,你在正方形的脸上放了一个长方形的图像。
更详细的解释是,MeshGeometry3D.TextureCoordinates
定义了覆盖矩形图像的两个三角形,并将它们压缩成由MeshGeometry3D.Positions
中的值定义的正方形区域。
现在有许多解决方案取决于您想要实现什么。让我们从一个简单的例子开始:
改变你的刷子有一个正方形的形象。这将节省图像的高宽比,因为默认情况下,Image.Stretch
是Uniform
。请注意,我还将背景更改为Transparent
。
<MaterialGroup x:Key="mat1" >
<DiffuseMaterial >
<DiffuseMaterial.Brush >
<VisualBrush >
<VisualBrush.Visual >
<Grid Width="800" Height="800" Background="Transparent">
<Image Source="screenshot-1.Png"></Image>
</Grid>
</VisualBrush.Visual >
</VisualBrush >
</DiffuseMaterial.Brush >
</DiffuseMaterial >
</MaterialGroup>
https://stackoverflow.com/questions/18023994
复制相似问题