Jak*_*cas 6 c++ opengl 3d angle rotation
我目前正在尝试使用OpenGL(使用SDL)将立方体绘制到我在屏幕上单击的位置,然后让它指向我右键单击屏幕中的位置.
我可以使用gluUnproject在我想要的位置成功绘制一个立方体 - 意思是我已经知道我的立方体所在的坐标.
但是我不知道如何计算使我的立方体点在新位置所需的所有角度.
当然我仍然使用gluUnproject来找到我的右键单击的坐标,但我只知道如何使用2D图形围绕Z轴旋转.
例如之前,如果我想围绕Z轴旋转一个四边形(当然,这将是一个自上而下的视图,其中Z轴仍在"穿过"屏幕)在2D中,我会做类似的事情:
angle = atan2(mouseCoordsY - quadPosY, mouseCoordsX - quadPosX);
glRotatef(angle*180/PI, 0, 0, 1);
Run Code Online (Sandbox Code Playgroud)
我的问题是,我将如何在3D中进行此操作?
任何帮助是极大的赞赏.
如果你的立方体是A =(x0,y0,z0)
如果您的立方体当前正在查看B =(x1,y1,z1)
如果你想看它C =(x2,y2,z2)那么;
让v1成为从A到B的向量
v1 = B - A.
和v2是从A到C的那个
v2 = C - A.
首先将它们标准化.
v1 = v1 / |v1|
v2 = v2 / |v2|
Run Code Online (Sandbox Code Playgroud)
然后计算旋转角度和旋转轴
angle = acos(v1*v2) //dot product
axis = v1 X v2 //cross product
Run Code Online (Sandbox Code Playgroud)
你可以用glRotate来调用
glRotate(angle, axis[0], axis[1], axis[2])
Run Code Online (Sandbox Code Playgroud)