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

时间:2011-05-23 19:29:31

标签: wpf animation 3d flicker

我是WPF中3D和动画的新手。我一直在尝试创建一个非常简单的场景,由一个地板和两个立方体组成(好吧,3D矩形,矩形棱镜,无论什么叫做)。这个场景有一个透视相机,我试图制作动画(我基本上希望它在场景中飞行)。

代码非常简单,我相信大部分时间都采用了很好的方法。请在下面找到相关摘录和sample project can be downloaded here

XAML:

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

VB:

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)

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

它似乎与this problem非常相似,但这对我没有帮助。

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

任何人都可以帮我找出原因吗?我花了足够的时间在这上面。

提前致谢!

1 个答案:

答案 0 :(得分:1)

您是否有单独的显卡或是否正在运行主板的视频输出?听起来你的显卡没有硬件加速。

如果你不这样做,你会得到你看到的效果。在小窗口尺寸下,软件渲染可以保持并以合理的帧速率显示场景。但是,当您增加窗口的大小时,显示每个帧所需的时间越来越长 - 直到显示时间大于您在场景中移动相机所花费的时间。它只会在你停止移动相机时赶上。

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

相关问题