gpt4 book ai didi

iphone - iOS openGL触摸触摸旋转球体的最佳方法

转载 作者:行者123 更新时间:2023-12-01 16:49:58 25 4
gpt4 key购买 nike

我使用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坐标系之间的不一致,这是我经常犯的错误。
  • 如果全部旋转,则可以在叉积中交换参数,也可以使用[0,0,-1]。这通常是由于左手坐标系和右手坐标系之间的混淆。
  • 如果只是水平旋转,请进行两个调整。 (不要否定diffX,没有人使用从左到右的X坐标。)
  • 关于iphone - iOS openGL触摸触摸旋转球体的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16935905/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com