我使用 SphereMeshGenerator 在 WPF 应用程序中创建球体元素。该球体使用媒体元素(视频)进行映射。
我想将相机放在球体的中间,以便从球体内部获得视图。
我尝试过使用相机位置和方向,但没有成功。不幸的是,我对 wpf 和 3d 的了解非常有限。
所以我的问题是,如果可能的话,怎么做?
我的目标是模拟视频全景动画。
谢谢你。
PS:这个问题已经被问过了,但仍然没有答案。请参阅此处的评论部分:
话题很老了,但是因为它可以帮助处于相同情况的其他人,我想我必须发布这样做的方法。
使用 SphereMeshGenerator 编写 XAML 代码:
<Window x:Class="WpfSphereMeshGenerator.SphereMeshGeneratorMediaInto"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfSphereMeshGenerator"
Title="SphereMeshGeneratorMediaInto"
Height="300" Width="300"
Loaded="Window_Loaded">
<!-- OXYZ axis in WPF are in center of ViewPort3D-->
<Window.Resources>
<!--sphere diameter-->
<local:SphereMeshGenerator
x:Key="MySphereMeshGenerator"
Center="0 0 0"
Radius="100.0" />
</Window.Resources>
<Grid>
<Viewport3D>
<!--camera in center of ViewPort => 0,0,0-->
<Viewport3D.Camera>
<PerspectiveCamera
x:Name="Camera"
UpDirection="0,1,0"
LookDirection="-2,-2,-2"
Position="0,0,0"
FieldOfView="100" >
</PerspectiveCamera>
</Viewport3D.Camera>
<ModelVisual3D>
<ModelVisual3D.Content>
<AmbientLight
Color="White">
</AmbientLight >
</ModelVisual3D.Content>
</ModelVisual3D>
<!--ModelVisualD by default in center of ViewPort-->
<ModelVisual3D
x:Name="ModelA">
<ModelVisual3D.Content>
<GeometryModel3D
Geometry="{Binding
Source={StaticResource
MySphereMeshGenerator},
Path=Geometry}">
<!--turn sphere-->
<GeometryModel3D.Transform>
<RotateTransform3D >
<RotateTransform3D.Rotation>
<AxisAngleRotation3D
x:Name="Rotate"
Axis="0,1,0"/>
</RotateTransform3D.Rotation>
</RotateTransform3D>
</GeometryModel3D.Transform>
<!--video put on BackMaterial-->
<!--inside face-->
<GeometryModel3D.BackMaterial>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<VisualBrush>
<VisualBrush.Visual>
<MediaElement>
<MediaElement.Triggers>
<EventTrigger RoutedEvent="MediaElement.Loaded">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<MediaTimeline
x:Name="mediaTimeline"
RepeatBehavior="Forever" />
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</MediaElement.Triggers>
</MediaElement>
</VisualBrush.Visual>
</VisualBrush>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</GeometryModel3D.BackMaterial>
</GeometryModel3D>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D>
</Grid>
<Window.Triggers>
<EventTrigger
RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="Rotate"
Storyboard.TargetProperty="Angle"
From="0" To="360" Duration="0:0:10"
RepeatBehavior="Forever">
</DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Window.Triggers>
感谢 MABROUKI 在这方面的帮助。