float x = e.getX();
float y = e.getY();
float screenWidth;
float screenHeight;
float sceneX = (x/screenWidth)*2.0f - 1.0f;
float sceneY = (y/screenHeight)*-2.0f + 1.0f; //if bottom is at -1. Otherwise same as X
Чтобы добавить немного более общий код:
/*
Source and target represent the 2 coordinate systems you want to translate points between.
For this question the source is some UI view in which top left corner is at (0,0) and bottom right is at (screenWidth, screenHeight)
and destination is an openGL buffer where the parameters are the same as put in "glOrtho", in common cases (-1,1) and (1,-1).
*/
float sourceTopLeftX;
float sourceTopLeftY;
float sourceBottomRightX;
float sourceBottomRightY;
float targetTopLeftX;
float targetTopLeftY;
float targetBottomRightX;
float targetBottomRightY;
//the point you want to translate to another system
float inputX;
float inputY;
//result
float outputX;
float outputY;
outputX = targetTopLeftX + ((inputX - sourceTopLeftX)/(sourceBottomRightX-sourceTopLeftX))*(targetBottomRightX-targetTopLeftX);
outputY = targetTopLeftY + ((inputY - sourceTopLeftY)/(sourceBottomRightY-sourceTopLeftY))*(targetBottomRightY-targetTopLeftY);
С помощью этого метода вы можете перевести любую точку между любыми N-мерных ортогональных систем (для 3D просто добавить то же самое для Z как для X и Y). В этом примере я использовал граничные координаты представления, но вы можете использовать ЛЮБОЙ 2 точки в сцене, например, этот метод будет работать все равно, если использовать центр экрана и верхний правый угол. Единственными ограничениями являются sourceTopLeftX! = SourceBottomRightX для каждого измерения
Хорошее предложение, но для людей, которые смотрят на этот ответ в будущем, будут устали от координат вашей камеры! –
Вот более общий код. Я надеюсь, что это помогает.. –