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分的赏金(场景中必须至少有一个对象(即)立方体)。
答案 0 :(得分:1)
Dave K之前提到的页面有许多弧形示例,here是一个符合轨迹球预期的典型物理的例子。但是,您可能希望稍微扩大搜索范围并查找四元数和纸张视图。
如果你不熟悉quaternions,它们是4维矢量空间的元素,是你正在寻找的弧球效果背后的基础。这个tutorial将让您快速掌握相当容易理解的四元数数学。
四元数由Papervision本地处理,所以教程并不难找。快速浏览谷歌会产生以下结果。
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