Преобразование экранных координат андроида в мировые координаты.
Я пытаюсь преобразовать касание экрана в мои координаты мира opengl. Мой мир - это просто плоская прямоугольная плоскость с -y вверх и -z далеко, с центром в 0,0,0. В моем представлении камеры плоскость поворачивается, так что положение камеры составляет 0, -10,7, смотря на 0,0,0. Таким образом, нажатие на screenwidth / 2, screenheight / 2 должно вернуть координаты opengl 0,0,0. Спасибо, я просто не могу обдумать это. Это моя попытка ...
//setup world coordinate matrices
/*//set camera position and angles
Matrix.setLookAtM(cameraViewMatrix, 0, GetCameraPosition().x, -GetCameraPosition().y, GetCameraPosition().z,
GetCameraTarget().x, GetCameraTarget().y, GetCameraTarget().z,
0f, 1f, 0.0f);
// Setup perspective projection matrix
Matrix.perspectiveM(perspectiveMatrix, 0, 45, aspectRatio, 0.1f, -100f);
tempMatrix = new float[16];
Matrix.multiplyMM(viewProjMatrix, 0, perspectiveMatrix, 0, cameraViewMatrix, 0);//add camera matrix to perspective
}*/
private PointF ScreenToGL(int screenX, int screenY){
//get percent of screen
float percentWidth = (float)screenX / (float)screenWidth;
float percentHeight = (float)screenY / (float)screenHeight;
//convert to percent of gl
float glX = glScreenWidth * percentWidth;
float glY = glScreenHeight * percentHeight;
//center coordinates
glX -= glScreenWidth/2;
glY -= glScreenHeight/2;
float[] startMatrix = new float[]{glX, 0, glY, 1};//opengl coordinates that are not yet multiplied by a view or proj matrix. center = 0,0,0 top left -2.5f,0,-5f, bottom right 2.5f,0,5f
float[] inverseMatrix = new float[16];
Matrix.invertM(inverseMatrix, 0, viewProjMatrix, 0);//inverted
float[] result = new float[16];
Matrix.multiplyMV(result, 0, inverseMatrix, 0, startMatrix, 0);
float newX = (result[0]/result[3]);
float newY = -(result[1]/result[3]);
float newZ = (result[2]/result[3]);
return new PointF(newX, newZ);
}