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

flu*_*els 4 opengl 3d vector matrix alignment

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

小智 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 );
}
Run Code Online (Sandbox Code Playgroud)