【问题标题】:How to get coordinates of touch screen points in ogl?如何在ogl中获取触摸屏点的坐标?
【发布时间】:2013-09-01 20:18:23
【问题描述】:

我正在使用 OpenGL 绘制地图。在读取 XML 文件并设置相应的缓冲区后,我正在绘制地图。这张地图包含街道、高速公路和边界。我想要的是每当我触摸地图时,应该改变特定图层的颜色。

我面临的问题是,每当我触摸屏幕时,我都会得到我触摸点的屏幕像素。我想将此点转换为 OpenGL 坐标,以便我可以将此点与绘制的地图匹配并突出显示所选点。

如何将此点转换为OpenGL坐标?

【问题讨论】:

    标签: android opengl-es projection projection-matrix


    【解决方案1】:

    您需要将屏幕点取消投影到 OpenGL 世界空间中:

    vec3 UnProjectPoint( const vec3& Point, const max4& Projection, const mat4& ModelView )
    {
        vec4 R( Point, 1.0f );
    
        R.x = 2.0f * R.x - 1.0f;
        R.y = 2.0f * R.y - 1.0f;
        R.y = -R.y;
    
        R.z = 1.0f;
    
        R = Projection.GetInversed() * R;
        R = ModelView.GetInversed() * R;
    
        return R.ToVec3();
    }
    

    【讨论】:

    • 先生,我是 openGL 的新手,所以我想知道我应该如何使用 vec3?
    • @MuneemHabib:这是您在 C++ 代码中使用的向量类。它不是 OpenGL 或 GLSL。
    • 我如何在 java/android 中使用它?
    【解决方案2】:

    您可以使用转换矩阵和您的相机位置将屏幕坐标转换为 opengl。 见:https://stackoverflow.com/a/11716990/1369222

    【讨论】:

    • 这个是Java/android怎么用?
    【解决方案3】:

    最好重写 GLSurfaceView 类的 onTouchEvent(MotionEvent e) 并在 onSurfaceChanged(GL10 gl, int width, int height) 方法的 Renderer 类中使用下面的代码。

    GLU.gluOrtho2D(gl,0,width,0,height);
    

    上面的代码会将屏幕坐标映射到openGL SurfaceView 屏幕上,您可以轻松地将点放在屏幕上。但这只会出现在 2D 视图中。

    【讨论】:

    • @Muneem Habib 请检查一下,如果这不起作用,请告诉我并告诉我问题。
    猜你喜欢
    • 2016-05-29
    • 1970-01-01
    • 2021-05-20
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多