我想在用户触摸时旋转立方体。旋转它,很简单,但实际问题是如果用户倾斜它,那么它总是应该停在特定的面上(立方体有6个面,我的意思是一次只能看到一个面)。如果有人为此工作,请给出你的建议。
答案 0 :(得分:0)
在立方体的情况下,这很简单:面法线是笛卡尔坐标轴。因此,如果限制笛卡尔坐标轴(X,Y,Z)周围的旋转并且旋转角度是π/ 2 = 90°的倍数,那么人脸看起来很直接。
因此,在用户停止交互的代码中,将旋转角度设置为下一个90°的倍数
fmod(round(angle/90) * 90, 360); // degrees
fmod(round(angle/(pi/2)) * pi/2, 2*pi); // radians
要么努力,要么制作动画。
如果您的对象不是立方体,而是任意的,则需要找到面的额外旋转以垂直于视图轴。此角度由acos( scalar_product(normalize(face_normal), normalize(view_axis)) )
确定,旋转轴由cross_product(normalize(face_normal), normalize(view_axis))