2011-05-23 45 views
2

我是新来的WPF中的3D和动画。我一直在试图创建一个非常简单的场景,由一个地板和2个立方体(很好,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) 

动画运行时的窗口非常小,预计(约320×240)。随着窗口大小的增加,动画闪烁和整个帧似乎被跳过,导致白屏。在一个大窗口(1920x1080)中,动画几乎不可见(在摄像机设置到新位置之前,这一切都是空白的)。

不知何故,它似​​乎非常类似于this problem但这并没有帮助我。

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

任何人都可以帮我弄清楚为什么?我花了足够多的时间在此。

在此先感谢!

+0

任何人都可以至少尝试我的示例项目,并让我知道他们的机器上是否出现同样的问题? – Nicolas 2011-05-26 11:51:01

回答

1

你有独立的图形卡,或者你跑掉主板的视频输出?这听起来像你的显卡没有硬件加速。

如果你不这样做,那么你会得到你看到的效果。在小窗口大小的情况下,软件渲染可以保持合理的帧速并显示场景。但是,随着您增加窗口的大小,显示每个帧需要的时间越来越长 - 直到显示时间大于您在相机周围移动相机的时间。只有当你停止移动相机时它才会起作用。

解决方案是坚持到小窗口或获得一个显卡硬件加速的3D图形。