我的WPF应用程序中有一些3D网格物体,我需要为它们添加一些动画,而不是典型的动画,而是一系列用于创建图形动画的PNG图像。
想想我需要在立方体的一侧添加卡通动画。
我对Viewport2DVisual3D非常了解,但是当我用Viewport2DVisual3D替换普通的ModelVisual3D时,我的表现非常糟糕!大约5 FPS标记。
只要我将IsVisualHostMaterial设置为true删除材质,帧速率就会恢复到正常状态。
性能始终是一个棘手的主题,但我想的是使用WriteableBitmap或RenderTargetBitmap的图像源创建一个Visual Brush,然后将我的PNG绘制到该序列。
这听起来不错,或者我不应该得到我正在获得的糟糕表现吗?
答案 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解码器会让你失望。