2011-05-23 76 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圖形。