android - 如何在 ogl 中获取触摸屏点的坐标?

标签 android opengl-es projection projection-matrix

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

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

如何将这个点转换成OpenGL坐标?

最佳答案

您需要将屏幕点取消投影到 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();
}

关于android - 如何在 ogl 中获取触摸屏点的坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18510254/

相关文章:

android - gradlew testDebugUnitTest mergeAndroidReports

java - Android相机通过OpenGL编码

javascript - 在 Openlayers 4 中设置 D3 投影

c# - Unity C# 向围绕移动轴旋转的目标发射炮弹

c++ - vtk c++ 从 contourfilter 更新轮廓

java - 如何将空格更改为下划线并使字符串不区分大小写?

android - 如何从android中的线程获取结果?

java - 应用程序因向 FirebaseDatabase.getReference() 传递空值而崩溃

android - 将 Canvas 坐标系转换为 OpenGLES 2.0 坐标

android - LibGDX - 颜色选择器