在Android opengl编程中,涉及到手指触摸屏幕事件,就不可避免地需要解决两种坐标转换的问题。
先定义类内的全局变量,表示OpenGL所在区域的屏幕宽高。
private int w;
private int h;
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
w = width;
h = height;
gl.glViewport(0, 0, width, height);
gl.glMatrixMode(GL10.GL_PROJECTION);//设置为投影矩阵模式
gl.glLoadIdentity();//重置
gl.glOrthof(x1 ,x2, y1,y2,-100,100); //正投影
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
}
在下面的语句中:
gl.glOrthof(x1 ,x1, y1,y2,-100,100); //正投影
在触屏事件中,计算出的x,y为opengl的视口坐标。
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
x = event.getX()*(x2-x1)/w + x1;
y = (h-event.getY())*(y2-y1)/h + y1;
}
return true;
}