java将对象旋转到面点
我想旋转一个物体来面对一个我有点麻烦的点
我从一个物体开始,这个物体的底面为零,并且在y轴上对齐
我想旋转它,使对象的顶部朝向目标
到目前为止,我的过程是: 给定轴A
- 找到我的位置和我的注视位置之间的距离:D
- 创建方向向量:V=D.normalize()
- 找到正确的向量:R=A交叉点D
- 求上方向向量:U=D交叉R
- 求向上和方向之间的角度:角度=acos((U点D)/(U.length*D.length))
- 按每个轴上按方向缩放的角度旋转
下面是它的代码表示。我不确定这到底是怎么回事,我已经在纸上解决了,据我所知,这种方法应该有效,但得出的结果是完全错误的。如果有人看到任何缺陷,并能为我指出正确的方向,那就太好了
Vector3 distance = new Vector3(from.x, from.y, from.z).sub(to.x, to.y, to.z);
final Vector3 axis = new Vector3(0, 1, 0);
final Vector3 direction = distance.clone().normalize();
final Vector3 right = (axis.clone().cross(direction));
final Vector3 up = (distance.clone().cross(right));
float angle = (float) Math.acos((up.dot(direction)/ (up.length() * direction.length())));
bondObject.rotateLocal(angle, direction.x , direction.y, direction.z);
# 1 楼答案
这里的基本思想如下
directionA
directionB
rotationAngle
rotationAxis
这是修改后的代码