3D的话,一般 “地平面” 是OXZ,“高度” 是 Y。
在 Y 轴方向需要考虑重力加速度的影响,不过你说上下转动没问题,那就成在OXZ平面的二维问题了。
设目标的位置P(x, y),那你就
var theta = Math.atan2(P.y, P.x);
得到theta,是个弧度∈(-π, +π],从 +X 轴开始向 +Y 轴转是正方向,你就朝着与 +X 轴夹角为 theta 弧度的方向射箭就可以命中。
你控制旋转是用矩阵?四元数?左手系还是右手系?弓箭发射方向对齐 +Z轴 还是 -Z轴 或者其他哪个轴?
假设是右手系,向 +Z轴 发射,采用矩阵,旋转方法是:
1 初始化矩阵为单位阵
2 绕 Y 轴转 theta 弧度
3 绕 X 轴转垂直方向的弧度(你说没有问题)
现在这个矩阵的第三行或者第三列就是发射方向的向量,到底是行还是列,要看你用的是行向量还是列向量,就是说当作向量与矩阵乘法时,你是 向量 * 矩阵,还是 矩阵 * 向量,前者是行向量,后者是列向量,行向量就用第三行,列向量就用第三列。
