将Z轴与矢量对齐的最简单方法是什么?

时间:2008-10-11 09:58:46

标签: opengl 3d vector alignment matrix

给定诸如(0,0,0)的点和像(x,y,z)这样的向量。将负(0,0,0)中心的负Z轴对齐到该向量方向的最简单方法是什么?使用OpenGL的例子很受欢迎,但不是必要的。

5 个答案:

答案 0 :(得分:14)

有很多不同的方法可以将坐标框架旋转到指定方向;它们都会让z轴指向您想要的方向,但x轴和y轴的方向会有所不同。

以下内容为您提供最短轮换,可能是您想要的也可能不是。

vec3 target_dir = normalise( vector );
float rot_angle = acos( dot_product(target_dir,z_axis) );
if( fabs(rot_angle) > a_very_small_number )
{
    vec3 rot_axis = normalise( cross_product(target_dir,z_axis) );
    glRotatef( rot_angle, rot_axis.x, rot_axis.y, rot_axis.z );
}

答案 1 :(得分:1)

要回答我自己的问题,我提出的最佳答案是:

将向量分为“组件”。 x分量是沿x轴的位移。如果我们转向三角学,我们有cos(alpha)= x / vector_magnitude。如果我们计算RHS,那么我们可以导出alpha,这是我们必须围绕y轴旋转的量。

然后通过对glRotatef()的一系列调用,坐标系可以与向量对齐

答案 2 :(得分:1)

您可能希望查看Diana Gruber's文章

答案 3 :(得分:0)

有很多关于旋转坐标(或旋转物体,相同的东西)的资源。我从this site学到了很多东西,关于如何在多个方面进行编程,特别是how to manipulate vectors

答案 4 :(得分:0)

页面here有一个“将矢量移动到z轴的转换”部分 似乎是你想要的,或者可能是它的反面。