java中的openGL:使用TouchEvent移动相机

Posted

技术标签:

【中文标题】java中的openGL:使用TouchEvent移动相机【英文标题】:openGL in java: moving camera with TouchEvent 【发布时间】:2017-07-04 05:23:13 【问题描述】:

我需要通过触摸屏创建带有 x、y 轴的相机的移动/更改位置。我已经阅读了许多以前的问题,但没有发现可以解决我的问题的东西。

如何使用此代码? :

class ESSurfaceView extends GLSurfaceView 

private final float TOUCH_SCALE_FACTOR = 180.0f / 320;
private float mPreviousX;
private float mPreviousY;

@Override
public boolean onTouchEvent(MotionEvent e) 

    float x = e.getX();
    float y = e.getY();

    switch (e.getAction()) 
        case MotionEvent.ACTION_MOVE:

            float dx = x - mPreviousX;
            float dy = y - mPreviousY;

            if (y > getHeight() / 2) 
                dx = dx * -1 ;
            

            if (x < getWidth() / 2) 
                dy = dy * -1 ;
            

            GLRenderer.setAngle(
                    GLRenderer.getAngle() +
                            ((dx + dy) * TOUCH_SCALE_FACTOR));
            requestRender();
    

    mPreviousX = x;
    mPreviousY = y;
    return true;


public ESSurfaceView(Context context)

    super(context);

    setEGLContextClientVersion(2);
    GLRenderer renderer = new GLRenderer();
    setRenderer(renderer);

    // Render the view only when there is a change in the drawing data
    //setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);

【问题讨论】:

【参考方案1】:

官方 android 培训有一个示例(与您的大部分相同): https://developer.android.com/training/graphics/opengl/touch.html 它还提供完整的源代码。

顺便说一句 - 你永远不会在 openGL 中移动相机 - 你会移动世界。 如需进一步了解,请阅读: http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices/ 这应该可以让您更好地了解事情的运作方式......

【讨论】:

以上是关于java中的openGL:使用TouchEvent移动相机的主要内容,如果未能解决你的问题,请参考以下文章

获取级联TouchEvent的目标不起作用

使用 SYSTEM_UI_FLAG_HIDE_NAVIGATION 时监听第一个 TouchEvent

完全理解Android TouchEvent事件分发机制

如何使用 OpenGL 监控 Java 中的 GPU 使用情况?

动作脚本 3:使用 MouseEvent.CLICK 和 TouchEvent.TOUCH_TAP

如何使用纯 JavaScript 在 grunt-run qunit 测试中触发 TouchEvent?