在OpenGL中实现朝特定方向旋转

3

我开始对数学感到困惑。

我希望制作一个旋转功能,将Y轴的方向转化为给定的方向。

因此,我想要一个输入方向的函数,并调用glRotatef()。在函数之后,我所画的任何东西都应该指向给定的方向而不是向上。

glRotatef有4个参数:角度、X、Y、Z。


如果你已经把 数学 本身搞糊涂了,那就是一种成就...不管怎样,你的问题远非具体。SO不会为你学习OpenGL和数学,抱歉。找一个教程并跟着做吧。 - Bartek Banachewicz
1个回答

2

基本上,您想要将世界y轴与长度为1的方向d对齐。为了使用glRotatef组合旋转矩阵,您需要一个轴a = [a_x,a_y,a_z]和一个角度omega

y转换为d的旋转轴垂直于yd,因此可以通过向量叉积计算:

a = cross(y, d);

旋转角度omega是向量yd之间的角度,因此可以通过点积计算:
omega = acos(dot(y, d));

现在您可以使用以下方式构建旋转矩阵:

glRotatef(omega, a_x, a_y, a_z);

请注意,omega 的单位应为度而非弧度。同时检查旋转方向。


谢谢!但是如果d = Vector(0,-1,0)(指向与y轴相反的方向),则叉积非常奇怪。我应该特别检查吗? - vinczemarton
是的,在这种情况下,你应该选择一个在xz平面上任意的单位向量,比如x轴。 - mrucci

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接