一般来说,在这样的坐标系之间过渡:如果你从系统 A 过渡到 B 并且你有点
- AOrigin(接收器视图的左上角)
- AEnd(接收器视图的右下角(原点 + 大小))
- BOrigin(GL 视图的左上角)
- BEnd(您的 GL 视图的右下角(原点 + 大小))
其中 AOrigin 和 BOrigin 表示视图中的相同位置,AEnd 和 BEnd 也是如此
那么对于receiver view中的点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”坐标/从“GL”坐标转换。一个常见的情况是左上角位于 (0, 0) 且底部位于 (1280, 800) 的视图,并且您的“GL”坐标从 (-1, 1) 到 (1, -1):
X = -1 + (P.x/1280)*2
Y = 1 + (P.y/800)*(-2)
另外请注意,只要(origin-end).x != 0 AND (origin-end).y != 0,您可以使用任意两对代表屏幕上相同位置的点