Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Viewport3D内容大小_C#_Wpf_Xaml_Size_Viewport3d - Fatal编程技术网

C# Viewport3D内容大小

C# Viewport3D内容大小,c#,wpf,xaml,size,viewport3d,C#,Wpf,Xaml,Size,Viewport3d,我有一个包含图像的Viewport3D,下面是我的代码: <Window> <Window.Resources> <MaterialGroup x:Key="mat1" > <DiffuseMaterial > <DiffuseMaterial.Brush > <VisualBrush >

我有一个包含图像的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时,它看起来是这样的:


有人能帮我吗?

简单的解释是,你把一个矩形图像放在一个正方形的脸上

更详细的解释是,
MeshGeometry3D.TextureCoordinates
定义了两个覆盖矩形图像的三角形,并将它们压缩到由
MeshGeometry3D.Positions
中的值定义的正方形区域中

现在有许多解决方案取决于您想要实现的目标。让我们从一个简单的开始:

将笔刷更改为方形图像。这将保留图像的纵横比,因为默认情况下,
image.Stretch
Uniform
。请注意,我还将背景更改为透明

    <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>