直观的方式来处理在弧球外拖动?

所以我正在写一个游戏(或玩具),它涉及到用鼠标操纵一个3d对象。 我试图获得最直观的控制,我可以。

我已经实现了“弧形球”鼠标控制 。 除了当我将鼠标拖到虚拟球的范围之外时,我对它的“感觉”感到满意。

目前,当从相机到世界空间中的鼠标指针的光线不与虚拟球体相交时,我只是find最接近它的点。

这导致了一些行为像这个例子 (不是我的代码,只是我用与我相同的实现find的例子)。

当您单击并从多维数据集中拖出时,请注意行为更改。

我不确定是否有意义,但是我希望有一些方法可以让立方体继续旋转,不管鼠标指针有多远,同时仍然保持标准弧球的有用属性,起点将撤消所有旋转。

有什么建议么?

我没有真的想过这个,但是这个怎么样:

让从球体中心到边界(屏幕坐标)的距离为X.当鼠标从球体中心离开X时,球体应旋转1 / 4PI以获得正确的感觉(例如保持在鼠标下这是在鼠标下)。 现在让Y是屏幕坐标中从球体中心到鼠标的距离。 球体现在应该旋转的弧度是Y / X * 1 / 4PI,您应该在与球体中心和鼠标指针之间的虚线垂直的轴上旋转(确保将其映射回世界坐标时间第一)。

一定要小心旋转后的旋转,也许使用四元数,如果你还没有使用它们。

当我自己实现弧球旋转的时候,我个人觉得从照相机的角度来看,对我来说更加简单直观。 此外,大多数(如果不是全部的话)3D程序(CAD,等级编辑器)允许您围绕焦点旋转相机(在您的程序中,焦点可以是对象的中心)。

我不会重复步骤/回答, 而只会链接到它 。