我想获得对象和另一个对象之间的角度。这必须是垂直和水平角度。
我的坐标为:
posX, posY, posZ
objectX, objectY, objectZ
我试过了:
glRotatef( atan2(objectY - posY,objectX - posX)* 180.0f / 3.14f, 0.0f, 0.0f, 1.0f );
glRotatef( atan2(objectZ - posZ,objectX - posX)* 180.0f / 3.14f, 0.0f, 1.0f, 0.0f );
但有时候无法正常工作
答案 0 :(得分:1)
严格地说,如果你只有两个“物体”,它们之间没有任何角度。你需要一个参考框架。
例如,2-D中的两个点之间没有角度。但是,如果将一个视为原点,则可能需要测量第二个点与 x轴之间的角度。
同样,在3-D中,您需要有一个参考框架。你实际上不会得到1个角度,但是2.一个角度围绕 z轴乘以2PI,第二个角度上下移动(角度来自 xy-plane )PI。查看Spherical Coordinates以获得更好的解释。
考虑到这一点,您想要:
但是等等!如果您关心第一个物体的方向怎么办? EG,这是一个朝着某个方向看的角色。您可能希望该角度取决于他正在寻找的方式。如果他正好看它,你可能想要0弧度(0度),如果它在他身后,你可能想要PI弧度(180度)。
该过程与上述过程相同,但您首先必须将第二个对象从世界空间转换为“角色”空间 - 该坐标系与第一个对象相关。它在数学上与将某些东西转换为相机空间相同。从那里只需将对象的新位置从笛卡尔坐标转换为球坐标即可获得角度。
<强>建议强>
#define
,最好使用标准或广泛使用的库。glRotatef
找到角度。 OpenGL仅用于绘图。给定两个对象,您应该能够在不调用OpenGL的情况下找出它们之间的角度。实际上,你不应该调用OpenGL。