如何将Canvas3D上的移动转换为虚拟3D世界中的移动

时间:2010-05-21 10:37:40

标签: virtual translation java-3d canvas3d

我的目标是以这样的方式移动虚拟世界中的形状,使其最终位于画布上的鼠标指针的位置。

我有什么: - Canvas3D对象上的鼠标位置(x,y) -Point3d对象,其中从Canvas3D视口开始的拾取光线与第一个场景对象相交。 (指向我想要开始拖动的3D空间)

我想要的: - 转换Point3d坐标的一些方法,以便初始交点(Point3d对象)始终与画布上的鼠标位置重叠(与我使用拾取光线确定用户从Canvas3D对象点击的内容时相同) )。

谢谢!

1 个答案:

答案 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值,可以插回到光线方程中以给出交点。