给定一个点,例如 (0, 0, 0) 和一个向量,例如 (x, y, z)。对齐以 (0, 0, 0) 为中心的负 Z 轴以指向该向量的方向的最简单方法是什么?欢迎使用 OpenGL 的示例,但不是必需的。
fluffels
问问题
11803 次
5 回答
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 );
}
于 2008-10-11T12:43:47.223 回答
1
要回答我自己的问题,我想出的最佳答案是:
将向量分成“分量”。x 分量是沿 x 轴的位移。如果我们转向三角学,我们有 cos(alpha) = x / vector_magnitude。如果我们计算 RHS,那么我们可以推导出 alpha,这是我们必须绕 y 轴旋转的量。
然后可以通过一系列调用 glRotatef() 将坐标系与向量对齐
于 2008-10-11T10:02:51.747 回答
1
你可能想看看Diana Gruber 的文章
于 2009-07-06T13:42:02.063 回答
0
此处的页面有一个“将矢量移动到 z 轴的转换”部分,这似乎是您想要的,或者可能是它的倒数。
于 2008-11-05T20:05:17.327 回答