// get world target offset
// convert world target offset to world direction normal
// get my world transposed (inverted)
// rotate world direction normal to my space normal
Vector3D lWorldTargetOffset = gWorldTargetLocation - gWorldMyLocation;
Vector3D lWorldTargetDirection = lWorldTargetOffset.Normalize();
MatrixD lMyWorldTransposed = MatrixD.Transpose(MyWorldMatrix);
Vector3D lMySpaceTargetDirection = Vector3D.Rotate(lWorldTargetDirection, lMyWorldTransposed);
5条答案
按热度按时间rhfm7lfc1#
这些方程没有一个是“错误的”,但都有点笨拙。Ryder052,你的例子没有考虑到你所评论的某些情况。为什么不使用atan2呢?
给定单位(归一化)方向矢量d
axkjgtzd2#
您无法从方向向量取得偏航、俯仰和滚动,因为方向向量只会告知要查看的方向(偏航和俯仰)
要得到偏航和俯仰,你可以使用三角学-我假设你有一些工作知识。查看this wiki page,获得一些有用的图表来可视化Angular 。
令Y =偏航,P =俯仰。
首先得到偏航的是你想要的:
现在要获得音高:
为了得到Y和P的实际值,你需要使用反正切函数,我在上面用正切函数来写,以使推导更清楚。
请注意,减号取决于您如何定义Angular 和轴,但您应该了解。
然后,您可以将roll设置为0或任何您喜欢的值。
f1tvaqid3#
你可能并不需要偏航、俯仰和滚转,你只需要正确的转换。试着用
gluLookAt
来构建它。Documentation。n9vozmp44#
亲爱的未来的谷歌人,这里有一个行之有效的方法:
假设螺距:沿X轴旋转,偏航:沿Y轴旋转,滚动:沿Z轴旋转。方向矢量V(x,y,z)
t9eec4r05#
我不知道这些答案是什么,因为我不能让它们中的任何一个工作。
我创造了自己的解决方案...
现在,世界目标方向法线位于我的空间中
根据方向法线,所有值都是-1到1,因此,如果您想要度数,只需 * 90。
不是说这是最好的解决方案,但它是唯一的一个我可以得到工作后,花了几个小时在网上搜索和涉水通过大量的迟钝和模糊的污垢。
我希望你,某人,或任何人,会喜欢简单地旋转目标方向法线使其相对于myspace,并发现它很容易和有帮助:)