Papervision3D的Arcball实现

时间:2009-09-29 17:01:42

标签: flash actionscript-3 papervision3d arcball

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和arcballs没有直接关系。 (也许还有另一个3D Flash引擎的arcball实现?)

非常感谢任何有关此事的帮助。

**编辑**为Papervision3D的一个有效的弧形实现添加了一个500分的赏金(场景中必须至少有一个对象(即)立方体)。

4 个答案:

答案 0 :(得分:1)

Dave K之前提到的页面有许多弧形示例,here是一个符合轨迹球预期的典型物理的例子。但是,您可能希望稍微扩大搜索范围并查找四元数和纸张视图。

如果你不熟悉quaternions,它们是4维矢量空间的元素,是你正在寻找的弧球效果背后的基础。这个tutorial将让您快速掌握相当容易理解的四元数数学。

四元数由Papervision本地处理,所以教程并不难找。快速浏览谷歌会产生以下结果。

Quaternions in Papervision3D

papervision3d上的conversation和可怕的万向节锁

最后,一个list的wordpress博客讨论了这个主题(并非所有闪存相关)

答案 1 :(得分:0)

答案 2 :(得分:0)

您正在寻找: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;

答案 3 :(得分:0)

根本不确定这是否是你想要的,但这个项目基本上是一个Flash实现,其中一些元素针对papervision3D:

http://code.google.com/p/spinnyglobe/

特别:

http://code.google.com/p/spinnyglobe/source/browse/trunk/flash/org/makerlab/ArcBall.as?r=122