android - 在 Android、OpenGL 中,我想使用以中心为设备屏幕中点的运动事件动态绘制一个圆,但没有获得所需的输出

标签 android opengl-es-2.0

以下是我通过从屏幕获取触摸位置并计算从原点到触摸点的半径并传递给渲染器来绘制圆来绘制圆的代码。

public boolean onTouchEvent(MotionEvent e) {
    float ex=0, ey=0;
    switch (e.getAction()) {
        case MotionEvent.ACTION_DOWN:
            ex = (e.getX()/(getWidth()/2))-1;
            ey = 1-(e.getY()/(getHeight()/2));
             dist = (float) (Math.sqrt(Math.pow(ex, 2)+Math.pow(ey, 2)));
    }
   mRenderer.radius = dist;
    requestRender();
    return true;
}

但与我指定的接触点半径相比,我绘制的圆的半径较小。即输出与触摸事件不一致。我想知道是否有用于到达触摸位置的触摸比例因子以及如何在代码中使用它?

最佳答案

正如 5agado 指出的那样,这是因为您需要考虑投影和 View 矩阵。

您可以为此使用光线拾取:它基本上包括从屏幕中的触摸点到您的场景跟踪光线。在您的情况下,您需要计算此射线与绘图表面的交点。

可以看看thisthat

关于android - 在 Android、OpenGL 中,我想使用以中心为设备屏幕中点的运动事件动态绘制一个圆,但没有获得所需的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16272437/

相关文章:

iphone - iOS、iPhone、iPad (OpenGL ES) 是否支持 PBuffer?

java - OpenGL ES 2.0/3.0 中有很多对象时出现 alpha 混合问题

android - AdapterView的onItemClickListener和OnItemSelectedListener的区别

Java android Open Street map 不显示 map

android - 有没有办法检查 Android 设备是否支持 openGL ES 2.0?

ios - OpenGL ES 纹理质量下降

android - Material Components Catalog 应用程序在哪里?

java - 如何模块化长代码

java - React native - 如何修复 Java.lang Double 无法转换为 java.lang.Boolean

c++ - 无法构建 opengl es 2.0 c++ native android 项目。 ( fatal error : android/sensor. h:没有这样的文件或目录)