是否有针对Papervision3D的arcball实现?
有许多用于Flash/ActionScript的arcball实现,但没有专门针对Papervision3D的实现。
下面是一个flash的arcball实现示例:
http://www.unitzeroone.com/blog/2009/09/08/source-better-flash-10-3d-interaction-arcball/
我已经开始基于DirectX ArcBall类编写自己的实现。
然而,它不能正常工作,我对原因感到困惑。
从立方体的初始位置,我可以点击并拖动弧球,正如人们所期望的那样。
但是,如果我开始累积四元数中的轴/角度,当立方体旋转足够多时,方向会反转。不应该有旋转方向的反转或任何其他奇怪的行为。
我在网上搜索过,没有发现任何与Papervision3D和arcball有直接关系的东西。(也许有另一个3D Flash引擎的arcball实现?)
在这件事上的任何帮助都将非常感谢。
**编辑**添加了500点的奖励,用于Papervision3D的一个有效的弧球实现的答案(必须至少有一个对象(即)场景中的立方体)。
发布于 2009-10-21 08:35:29
Dave K之前提到的页面有许多arcball的例子,here是一个符合轨迹球所期望的典型物理的例子。然而,你可能想扩大你的搜索范围,寻找四元数和纸视觉。
如果你不熟悉quaternions,它们是4维向量空间中的一个元素,也是你正在寻找的弧球效果背后的基础。这个tutorial将让你快速掌握四元数数学,这是相当容易理解的。
四元数是由Papervision原生处理的,所以教程并不难找到。快速浏览一下google就会得到以下结果。
Quaternions in Papervision3D
papervision3d上的conversation和可怕的万向节锁
最后,一个list的wordpress博客讨论了这个话题(不是所有的flash相关的)
发布于 2009-10-18 18:10:25
我想你要找的是:http://www.kelvinluck.com/assets/papervision3d/cube_tweaks/
发布于 2009-10-21 00:13:56
这就是你要找的东西:Dragging an object to rotate?
下面是有趣的部分:
var currentMousePoint:Point = new Point(viewport.containerSprite.mouseX, viewport.containerSprite.mouseY);
if(isMouseDown)
{
var difference:Point = currentMousePoint.subtract(previousMousePoint);
var vector:Number3D = new Number3D(difference.x, difference.y, 0);
var rotationAxis:Number3D = Number3D.cross(vector, FORWARD);
rotationAxis.normalize();
var distance:Number = Point.distance(currentMousePoint, previousMousePoint);
var rotationMatrix:Matrix3D = Matrix3D.rotationMatrix(rotationAxis.x, -rotationAxis.y, rotationAxis.z, distance/250);
sphere.transform.calculateMultiply3x3(rotationMatrix, sphere.transform);
}
previousMousePoint = currentMousePoint;https://stackoverflow.com/questions/1493799
复制相似问题