我的目标是以这样的方式移动虚拟世界中的形状,使其最终位于画布上的鼠标指针的位置。
我有什么: - Canvas3D对象上的鼠标位置(x,y) -Point3d对象,其中从Canvas3D视口开始的拾取光线与第一个场景对象相交。 (指向我想要开始拖动的3D空间)
我想要的: - 转换Point3d坐标的一些方法,以便初始交点(Point3d对象)始终与画布上的鼠标位置重叠(与我使用拾取光线确定用户从Canvas3D对象点击的内容时相同) )。
谢谢!
答案 0 :(得分:1)
听起来好像你想使用与背景平面平行的平面并包含与物体的交点。即使鼠标移动到实际背景之外,您也可以使用此平面,因为它只是一个延伸到无穷大的数学概念。
我不是Java程序员所以我不能给你代码,但我是一名数学家,所以这里你需要的等式;)
设P表示原始交点,并调用背景平面单位正常n。这个法线也是我们感兴趣的平面的法线。设R表示光线上的一个点,l表示它的单位方向矢量。
然后,对于平面中的点x,平面的方程是(x-P).n = 0(。表示两个向量的点积)。射线上的点的等式是x = R + t * l,其中t是任何实数。因此,当
时,光线与平面相交(t * l + R - P).n = 0
即。当
t =(P-R).n /(l.n)
这为您提供了一个t值,可以插回到光线方程中以给出交点。