积极答复者
WPF3D旋转问题?

问题
答案
-
?????
- 已建议为答案 Jie BaoModerator 2012年6月15日 3:39
- 已标记为答案 Jie BaoModerator 2012年6月19日 8:35
- 已编辑 Shi Xin 2015年7月27日 8:00
-
好吧,计算还是比较复杂的,不过我们可以分解下,第一步先获得你在3D场景里面的点击的坐标, 参考: http://www.cnblogs.com/ustc_msra_ase/archive/2010/11/28/1890431.html
然后在鼠标移动的过程中,每次都要做点击测试,将每次算出的3D场景中的点的坐标进行比较,求得一个位移向量,这个向量分解到x,y,z三轴,然后分别在转动球面上对三个轴进行计算转动角alpha。如下图,举例x轴,x轴分量可以近似为转动球面的切割圆弧长,所以夹角alpha为:alpha = delta X / r (弧度制).
然后你就可以控制x周旋转这个角度。
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
- 已标记为答案 Jie BaoModerator 2012年6月19日 8:35
全部回复
-
你有使用过WPF 3D Tool http://3dtools.codeplex.com/ 这个官方提供的一个WPF 3D附加功能库吗? 它里面提供了一个基于鼠标控制3D模型的组件:Trackball
你可以下载下他的源代码和例子 http://3dtools.codeplex.com/SourceControl/list/changesets ,参考使用。
就其原理,无非是通过鼠标的一些移动和滚动事件,控制其3D模型上的 AxisAngleRotation3D,RotateTransform3D 或者 ScaleTransform3D。
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
-
通过VisualTreeHelper的 HitTest 方法可以做3D的点击测试,RayHitTestParameters 类进而可以提供命中测试的方向和原点位置,以致获得其点击测试的3D物体。 然后你可以根据鼠标在Viewport3D上移动的位置来确定要旋转移动的量。
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
-
从当前摄像机的的方向找齐法线方向,其法线方向即为物体旋转轴方向。 这个方向不一定是一个X Y Z正方向,但从 RotateTransform3D 中设置Value时候是由参考用的。 然后你还是需要处理 Viewport3D 的MouseMove等事件,在其中根据移动量来计算旋转量,旋转量可以根据物体离摄像机距离进行衰减。
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
-
好吧,计算还是比较复杂的,不过我们可以分解下,第一步先获得你在3D场景里面的点击的坐标, 参考: http://www.cnblogs.com/ustc_msra_ase/archive/2010/11/28/1890431.html
然后在鼠标移动的过程中,每次都要做点击测试,将每次算出的3D场景中的点的坐标进行比较,求得一个位移向量,这个向量分解到x,y,z三轴,然后分别在转动球面上对三个轴进行计算转动角alpha。如下图,举例x轴,x轴分量可以近似为转动球面的切割圆弧长,所以夹角alpha为:alpha = delta X / r (弧度制).
然后你就可以控制x周旋转这个角度。
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
- 已标记为答案 Jie BaoModerator 2012年6月19日 8:35
-
?????
- 已建议为答案 Jie BaoModerator 2012年6月15日 3:39
- 已标记为答案 Jie BaoModerator 2012年6月19日 8:35
- 已编辑 Shi Xin 2015年7月27日 8:00
-
是的, 参考别人的代码并不是炫耀, 只是一种有效的学习方式. shixin在3D方面很有经验,他做过很多例子,都是平时的不断积累,我在3D方面难免差一点。
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
-
点击上面Source code标签,你就能看到原码。codeplex是开源项目网站,上面的项目都是开源的。
Bob Bao [MSFT]
MSDN Community Support | Feedback to us