首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WPF三维旋转动画

WPF三维旋转动画
EN

Stack Overflow用户
提问于 2009-11-16 01:54:27
回答 2查看 2.8K关注 0票数 1

我在我的屏幕上有几个三维矩形,我想围绕Y轴旋转。

我想按下鼠标,把3d物体旋转到最大旋转,但是当用户移动鼠标时,我想稍微旋转它,使它看起来像锯(Y轴上旋转13到13度)。

目前,我可以做到这一点,但我的帧速度真的很差,当我移动鼠标快速。例如,当我点击矩形的左边,我会生成一个故事板和动画对象,然后将三维物体旋转到-13度。当我稍微把鼠标移到右边的时候,我想把它旋转到-12.5,等等……

再一次,我可以做所有这一切,只是表现很差!在某些情况下会下降到5-FPS .这是不可接受的。

我的问题是我这样做是最好的方法吗?否则你怎么能根据用户在屏幕上的位置动画一个旋转的基础呢?

谢谢你能提供的任何帮助!标记

EN

回答 2

Stack Overflow用户

发布于 2009-11-19 06:35:54

我想你做了以下几件事:

  • 对正在旋转的对象使用单独的Model3D &包括在Model3DGroup中
  • 给它一个包含RotateTransform3D的AxisAngleRotation3D
  • 在故事板中动画AxisAngle3D的Axis属性

如果我的假设是正确的,我认为我们可以得出结论,问题在于渲染效率,因为更新单个Axis值、重新计算转换和更新MILCore所需的CPU是可以忽略不计的。

我可以想出几种提高渲染性能的方法:

  1. 如果您正在旋转的Model3D是一个由MeshGeometry3D支持的GeometryModel3D,请尽可能地简化网格和所使用的材料。它也可以帮助替代一个不同的网眼特写。
  2. 如果正在旋转的Model3D是使用VisualBrush画笔的GeometryModel3D,则在动画期间,暂时将VisualBrush替换为包含BitmapImage的ImageBrush,该ImageBrush是动画启动时VisualBrush底层的BitmapImage的快照。当动画结束时,将VisualBrush放回。用户可能不会注意到,当对象旋转时,其内容会暂时冻结。(请注意,如果您的Visual3D是Viewport2DVisual3D,则可以使用相同的技术。)
  3. 如果正在旋转的Model3D与其他对象组合成一个Model3DGroup,但完全位于其他组的前面或后面,那么将模型分离成自己的单独Viewport3DVisual,适当地分层以获得所需的效果。
  4. 简化照明或材料类型
  5. 监视实际的帧速率,如果它在使用情节提要时太低,则立即将对象旋转到鼠标指示的位置,而不使用动画。
票数 2
EN

Stack Overflow用户

发布于 2009-11-18 15:19:10

MSDN介绍了一些提示对WPF 3D性能的影响。如果您还没有发现它,请检查“性能影响:高”列表中的项目。

编辑:在2009年3月,乔希·史密斯在CodeProject上发表了“文章”一书,其中涉及旋转3D视图。也许你想看看他的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1739652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档