我的屏幕上有几个3d矩形,我想围绕Y轴旋转。
我想用鼠标按下,然后将3d对象旋转到最大旋转,但是当用户移动鼠标时,我想稍微旋转它,使其看起来像跷跷板(从一个范围旋转在Y轴上-13到13度。)
目前,我可以做到这一点,但是当我快速移动鼠标时,我的帧率确实很差。因此,例如,当我单击矩形的左侧时,我生成一个故事板和动画对象,然后将3d对象旋转到-13度。然后,当我稍微向右移动鼠标时,我想将其旋转到-12.5,依此类推......
同样,我可以做到这一切,只是性能受到很大影响!在某些情况下,它降至5-FPS ......这是不可接受的。
我的问题是我这样做是最好的方式吗?你怎么能在屏幕上的用户位置上设置旋转动画?
感谢您提供的任何帮助! 标记
答案 0 :(得分:2)
我假设您正在执行以下操作:
如果我的假设是正确的,我认为我们可以得出结论,问题在于渲染的效率,因为更新单个Axis值,重新计算Transform以及更新MILCore所需的CPU可以忽略不计。
我可以想到几种可以提高渲染性能的方法:
如果您正在旋转的Model3D是由MeshGeometry3D支持的GeometryModel3D,请尽可能多地简化网格和使用的材质。它还可以帮助替换不同的网格物体。
如果正在旋转的Model3D是使用VisualBrush画笔的GeometryModel3D,则在动画期间暂时将VisualBrush替换为包含BitmapImage的ImageBrush,该BitmapImage是动画启动瞬间VisualBrush的Visual底层快照。当动画结束时,放回VisualBrush。用户可能不会注意到对象的内容在旋转时会暂时冻结。 (请注意,如果您的Visual3D是Viewport2DVisual3D,则可以使用相同的技术。)
如果正在旋转的Model3D与其他对象组合成Model3DGroup但完全位于其他组的前面或后面,请将模型分离到各自独立的Viewport3DVisual中,并进行适当的分层以获得所需的效果。 / p>
简化灯光或材质类型
监控实际帧速率,如果在使用情节提要时它过低,请立即将对象旋转到鼠标指示的位置,而不使用动画。
答案 1 :(得分:0)
MSDN提供some tips有关WPF 3D性能的影响。如果您还没有发现它,请检查“性能影响:高”列表中的项目。
编辑: 2009年3月,Josh Smith在CodeProject上发布了an article,涉及旋转3D对象。也许你想检查他的解决方案。