将屏幕坐标转换为OpenGL顶点浮点

时间:2014-07-25 07:22:20

标签: android opengl opengl-es

当用户触摸屏幕时,我使用OpenGL ES 2.0绘制自由格式路径。 根据大量样本,为了制作一个对象,我需要使用数组中x,y,z的浮点值来定义顶点。 我偶然发现了一个问题,我无法从屏幕坐标定义这些浮点数。 我根据android sample提供的三角形对象类创建了一个Line类。

现在,在我的GLSurfaceView类中,我使用onTouchEvent方法然后在我的渲染器中使用此公式将屏幕坐标转换为浮点。

float lineCoords[] = new float[6];
    lineCoords[0] = (float) (mPreviousX * 2.0 / WIDTH - 1.0);
    lineCoords[1] = (float) (mPreviousY * -2.0 / HEIGHT + 1.0);
    lineCoords[2] = 0.0f;
    lineCoords[3] = (float) (x * 2.0 / WIDTH - 1.0);
    lineCoords[4] = (float) (y * -2.0 / HEIGHT + 1.0);
    lineCoords[5] = 0.0f;

基本上该公式遵循glOrtho数组,但结果并不令人满意,因为看起来在屏幕中央有一个垂直镜像,如果我触摸左侧,也会在右侧绘制路径反过来说。

那么,将触摸屏幕坐标转换为浮动x,y,z 的最佳方法是什么? (假设z保持0.0)

1 个答案:

答案 0 :(得分:1)

您可以使用gluUnProject或获取模型视图和投影矩阵并反转计算,从屏幕到空格坐标。

https://www.opengl.org/sdk/docs/man2/xhtml/gluUnProject.xml