私はウィンドウ内にViewport3Dを持っています。ウィンドウサイズが変更されたときにサイズが変更されます。コード内で動的にすべてのカメラ設定をWPFで計算するにはどうすればよいですか?
今<Window>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="100"/>
<RowDefinition/>
<Grid.RowDefinitions>
<Label Grid.Row="0" Content="top label"/>
<Viewport3D Grid.Row="1" x:Name="vp3D" >
<Viewport3D.Camera >
<PerspectiveCamera x:Name="pCamera" LookDirection="0 0 -1" UpDirection="0 1 0" />
</Viewport3D.Camera>
<Viewport2DVisual3D x:Name="v2dv3d">
<Viewport2DVisual3D.Geometry>
<MeshGeometry3D x:Name="mg3d" TextureCoordinates="0,0 0,1 1,1 1,0" TriangleIndices="0 1 2 0 2 3"/>
</Viewport2DVisual3D.Geometry>
<Viewport2DVisual3D.Material>
<DiffuseMaterial Viewport2DVisual3D.IsVisualHostMaterial="True" Brush="White"/>
</Viewport2DVisual3D.Material>
<Image Height="{Binding ElementName=vp3D, Path=ActualHeight}" Width="{Binding ElementName=vp3D, Path=ActualWidth}" Stretch="Fill"/>
</Viewport2DVisual3D>
<ModelVisual3D>
<ModelVisual3D.Content>
<DirectionalLight Color="#FFFFFFFF" Direction="0,0,-1"/>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D>
</Grid>
</Window
私はそれが元の2Dウィンドウ(変更何のように見えるが、実際に画像が3Dである)だと同様に画像が上を示してほしいです。
しかし、問題はWPFオリジナルと同じように見たい場合は、PerspectiveCamera.Position
またはMeshGeometry3D.Position
のようなカメラの設定を変更する必要があります。 Viewport3D
は、ウィンドウのサイズが変更されたときにサイズを動的に変更するので、動的にViewport3D
の設定を計算する必要があります。とにかくやりたいことはありますか?
私はすでにこれを試してみたが、正確に計算することができません。 WPF 3D: Fitting entire image to view with PerspectiveCamera
私はベストを尽くし、あなたの質問を2回読んだが、それでも理解できない。 Viewportの背後にある背景のようなイメージを持っていますか? –
@MarkusHütter基本的には 'Viewport3D'がないような' Image'ショーが必要です。 'Grid'には' Label'と 'Image'だけがあり、' Grid'は 'Window'でサイズを変えることができます – qakmak