2

Papervision3D 是否有轨迹球实现?

有许多用于 Flash/ActionScript 的轨迹球实现,但没有专门用于 Papervision3D。

下面是一个用于 flash 的轨迹球实现示例:

http://www.unitzeroone.com/blog/2009/09/08/source-better-flash-10-3d-interaction-arcball/

我已经开始基于 DirectX ArcBall 类编写自己的实现。

但是,它不能正常工作,我不知道为什么。

从立方体的初始位置,我可以按预期单击并拖动轨迹球。

但是,如果我开始在四元数中累积轴/角度,当立方体旋转足够多时,方向会反转。不应该有旋转方向的反转或任何其他奇怪的行为。

我搜索了互联网,没有发现任何与 Papervision3D 和 arcballs 直接相关的内容。(也许有另一个 3D Flash 引擎的轨迹球实现?)

在这件事上的任何帮助将不胜感激。

** 编辑 ** 为 Papervision3D 的有效轨迹球实现添加了 500 点赏金(场景中必须至少有 1 个对象(即)立方体)。

4

4 回答 4

1

Dave K 之前提到的页面有许多轨迹球示例,这里有一个符合轨迹球预期的典型物理特性的例子。但是,您可能想稍微扩大搜索范围并寻找四元数和纸质视觉。

如果您不熟悉四元数,它们是 4 维向量空间的一个元素,也是您正在寻找的轨迹球效果背后的基础。本教程将让您快速了解相当容易理解的四元数数学。

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

Papervision3D 中的四元数

关于 papervision3d 和可怕的万向锁的对话

最后,讨论该主题的 wordpress 博客列表(并非所有 Flash 相关)

于 2009-10-21T00:35:28.590 回答
0

这就是您要查找的内容:拖动对象进行旋转

这是有趣的部分:

    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;
于 2009-10-20T16:13:56.443 回答
0

I thing you are looking for this: http://www.kelvinluck.com/assets/papervision3d/cube_tweaks/

于 2009-10-18T18:10:25.207 回答
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

于 2009-10-20T18:07:05.357 回答