关于动画的WPF和3D问题

时间:2009-11-12 04:12:53

标签: wpf performance animation 3d

我的WPF应用程序中有一些3D网格物体,我需要为它们添加一些动画,而不是典型的动画,而是一系列用于创建图形动画的PNG图像。

想想我需要在立方体的一侧添加卡通动画。

我对Viewport2DVisual3D非常了解,但是当我用Viewport2DVisual3D替换普通的ModelVisual3D时,我的表现非常糟糕!大约5 FPS标记。

只要我将IsVisualHostMaterial设置为true删除材质,帧速率就会恢复到正常状态。

性能始终是一个棘手的主题,但我想的是使用WriteableBitmap或RenderTargetBitmap的图像源创建一个Visual Brush,然后将我的PNG绘制到该序列。

这听起来不错,或者我不应该得到我正在获得的糟糕表现吗?

3 个答案:

答案 0 :(得分:1)

实际上,想一想,你尝试过使用它吗?

<DiffuseMatrial>
  <DiffuseMaterial.Brush>
    <VisualBrush ...>
      <VisualBrush.Visual>
        ...

我知道MILCore通过将支持Visual作为一个单独的操作来处理VisualBrush,所以如果它能非常有效地使用3D,我不会感到惊讶。

<强>更新

我也可以尝试一下:

<DiffuseMaterial>
  <DiffuseMaterial.Brush>
    <DrawingBrush ...>
      <DrawingBrush.Drawing>
        <ImageDrawing ImageSource="{Binding ...} />

这将完全绕过Visual的使用,并且可能比Viewport2DVisual3D或VisualBrush运行得快得多。

答案 1 :(得分:0)

我还没有必要深入研究WPF的3D优化,但我知道Direct3D能够使用可写缓冲区进行渲染,因此如果MILCore正确实现它,那么您对WritableBitmap或RenderTargetBitmap的想法有合理的可能性。 Vista的Flip 3D能够使用任意应用程序(甚至是GDI应用程序)以高性能工作,并且还使用可写缓冲区。

如果这不起作用,另一个想法是将动画转换为视频,无论是传统方式还是通过从BitmapFrame序列创建DirectShow流。

希望其他人能够出现并给你一个更好的答案。

答案 2 :(得分:0)

如果您的PNG代表视频流,为什么不在一开始就将它们转换为视频格式?从帧创建AVI很容易。他们说,课程的马匹。可能是PNG解码器会让你失望。