我使用OpenGL绘制了Globe对象,并且可以用手指触摸来旋转它,但是在某些情况下它无法正常工作,因为我使用x和y之间的差值进行旋转
Rotation3D rot = sphere.currentRotation;
rot.x += diffX ;
rot.y += diffY ;
rot.z += 10 ;
sphere.currentRotation = rot;
当您将手指从右上移到左下时,效果不好。
有任何想法吗 ?
谢谢
彼得·加布拉
最佳答案
要任意旋转对象,最简单的方法是将它们的当前方向存储为变换矩阵并操纵这些元素。我会详细解释here。
唯一的不同是,在另一个问题中,OP希望应用来自两个控件(水平和垂直)的旋转,而您是基于拖动的旋转。该技术基本相同,但是需要围绕触摸的增量矢量计算任意旋转轴,而不是绕X轴或Y轴旋转,如下所示:
axis = [0, 0, 1] ⨯ [diffX, diffY, 0]
(
⨯
=“商品交叉”)然后,将U,V和W向量(如我的其他答案所述)围绕轴旋转一定角度,与增量向量的长度成比例:
M = rotation(k * length([diffX, diffY, 0]), axis)
U = M * U
V = M * V
W = M * W
如果发现对象以与预期相反的方向旋转,则有三种可能性:
diffY
。由于OpenGL和UIKit坐标系之间的不一致,这是我经常犯的错误。 diffX
,没有人使用从左到右的X坐标。)关于iphone - iOS openGL触摸触摸旋转球体的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16935905/