0

我在GLSurfaceView. 视图大小为 1280x696,因为底部带有软键、时间等的 android(平板电脑)状态栏(屏幕分辨率为 1280x800),但OnTouchListener正在接收坐标为 [646.0,739.0] 的触摸事件,因此我的 gluunproject 方法失败返回正确的值有没有办法返回尊重这些边界的事件?或者我应该如何重新计算位置?

4

1 回答 1

2

通常在此类坐标系之间过渡:如果您从系统 A 过渡到 B 并且您有点

  • AOrigin(接收器视图的左上角)
  • AEnd(接收器视图的右下角(原点 + 大小))
  • BOrigin(您的 GL 视图的左上角)
  • BEnd(您的 GL 视图的右下角(原点 + 大小))

其中 AOrigin 和 BOrigin 表示视图中的相同位置,对于 AEnd 和 BEnd 也是如此,然后对于接收器视图中的点 P:

X = B.Origin.x + ((P.x - AOrigin.x)/(AEnd.x - AOrigin.x)) * (BEnd.x - B.Origin.x)
Y = B.Origin.y + ((P.y - AOrigin.y)/(AEnd.y - AOrigin.y)) * (BEnd.y - B.Origin.y)

对于您的情况(由于缺乏信息,我不确定)AOrigin 位于 (0,0),AEnd 位于 (646, 739),BOrigin 位于 (0,0) 且 BEnd 位于 (1280, 800) :

X = P.x/646 * 1280
Y = P.y/739 * 800

您也可以使用它来转换到/从“GL”坐标。一个常见的情况是左上角位于 (0, 0) 且底部位于 (1280, 800) 的视图,并且您的“GL”坐标从 (-1, 1) 到 (1, -1):

X = -1 + (P.x/1280)*2
Y = 1 + (P.y/800)*(-2)

另请注意,您可以使用代表屏幕上相同位置的任意 2 对点,只要(origin-end).x != 0AND(origin-end).y != 0

于 2012-09-24T09:36:26.783 回答