Wpf 简单的相机动画有很多闪烁

Wpf 简单的相机动画有很多闪烁,wpf,animation,3d,flicker,Wpf,Animation,3d,Flicker,我不熟悉WPF中的3D和动画。我一直在尝试创建一个非常简单的场景,由一个地板和两个立方体组成(3D矩形、矩形棱柱,不管它叫什么)。这个场景有一个透视摄影机,我正在尝试设置它的动画(我基本上希望它在场景中飞行) 代码非常简单,我相信在大多数情况下都采用了很好的方法。请在下面找到相关的摘录,以及 XAML: 当窗口非常小(约320x240)时,动画将按预期运行。随着窗口大小的增加,动画闪烁,整个帧似乎被跳过,从而产生白色屏幕。在大窗口(1920x1080)中,动画几乎完全不可见(在相机设置到新位置之

我不熟悉WPF中的3D和动画。我一直在尝试创建一个非常简单的场景,由一个地板和两个立方体组成(3D矩形、矩形棱柱,不管它叫什么)。这个场景有一个透视摄影机,我正在尝试设置它的动画(我基本上希望它在场景中飞行)

代码非常简单,我相信在大多数情况下都采用了很好的方法。请在下面找到相关的摘录,以及

XAML:

当窗口非常小(约320x240)时,动画将按预期运行。随着窗口大小的增加,动画闪烁,整个帧似乎被跳过,从而产生白色屏幕。在大窗口(1920x1080)中,动画几乎完全不可见(在相机设置到新位置之前,动画都是空白的)

不知何故,它似乎非常相似,但这并没有帮助我

这是一个非常基本的动画,我不相信WPF在这方面有任何问题,所以我认为我做错了什么

有人能帮我找出原因吗?我在这方面花的时间已经够多了


提前谢谢

您是否有单独的图形卡,或者正在使用主板的视频输出?听起来你的显卡上没有硬件加速

如果你不这样做,你就会得到你所看到的效果。在较小的窗口大小下,软件渲染可以保持并以合理的帧速率显示场景。但是,随着窗口大小的增加,显示每一帧所需的时间越来越长,直到显示时间大于在场景中移动摄影机所需的时间。只有当你停止移动相机时,它才会捕捉到


解决方案是坚持使用小窗口或使用硬件加速3D图形的图形卡。

至少有人能试试我的示例项目,告诉我他们的机器上是否出现了相同的问题吗?
    <Viewport3D ClipToBounds="false" IsHitTestVisible="false">
        <!-- Camera -->
        <Viewport3D.Camera>
            <PerspectiveCamera x:Name="ViewportCamera"
                               Position="0 0 20" 
                               LookDirection="40 40 0" 
                               FarPlaneDistance="600" 
                               UpDirection="0 0 1" 
                               NearPlaneDistance="0.01" 
                               FieldOfView="75" />
        </Viewport3D.Camera>
        <!-- Light -->
        <ModelVisual3D>
            <ModelVisual3D.Content>
                <DirectionalLight Direction="1 0.5 1" />
            </ModelVisual3D.Content>
        </ModelVisual3D>
        <ModelVisual3D>
            <!-- Floor -->
            <local:CubeControl Color="Black" Size="300,300,1" Center="0,0,0" />
            <local:CubeControl Color="LightGray" Size="15,25,40" Center="40,40,20" />
            <local:CubeControl Color="LightGray" Size="25,20,60" Center="40,-40,30" />
        </ModelVisual3D>
    </Viewport3D>
Dim tAnimation As New Vector3DAnimation(ViewportCamera.LookDirection, New Vector3D(40, -40, -20), New Duration(TimeSpan.FromMilliseconds(1000)))
ViewportCamera.BeginAnimation(PerspectiveCamera.LookDirectionProperty, tAnimation)
Dim tAnimation2 As New Point3DAnimation(ViewportCamera.Position, New Point3D(-10, -10, 30), TimeSpan.FromMilliseconds(1000))
ViewportCamera.BeginAnimation(PerspectiveCamera.PositionProperty, tAnimation2)