如何从3D矢量获得偏航,俯仰和滚动

Jac*_*ack 13 opengl math 3d vector

我有一个应用于位置的方向向量给了我相机应该看的点.为了正确使用glRotatef,我如何从偏航,俯仰和滚动中获得?

提前致谢

phe*_*cks 16

你无法从方向向量得到偏航,俯仰和滚动,因为方向向量只能指出要查看的方向(偏航和俯仰)

为了获得偏航和俯仰你使用三角学 - 我假设你有一些工作知识.查看此Wiki页面,查看一些有用的图表,以查看角度.

设Y =偏航,P =俯仰.

首先得到你想要的偏航:

tan(Y) = x/(-y)
Run Code Online (Sandbox Code Playgroud)

现在获得投球:

tan(P) = sqrt(x^2 + y^2)/z
Run Code Online (Sandbox Code Playgroud)

要获得Y和P的实际值,您需要使用反tan,我已经使用tan将其写在上面以使推导更清晰.

请注意,减号取决于您如何定义角度和轴,但您应该明白这一点.

然后,您可以将roll设置为0或任何您喜欢的.


jjh*_*okk 15

这些方程都没有"错",但都有点笨拙.Ryder052,你的例子没有像你评论的那样考虑某些情况.为什么不使用atan2?

给定单位(归一化)方向向量d

pitch = asin(-d.Y);
yaw = atan2(d.X, d.Z)
Run Code Online (Sandbox Code Playgroud)


sig*_*fpe 8

你可能实际上并不想要偏航,俯仰和翻滚.你只需要正确的转换.尝试使用gluLookAt它来构建它.文档.