簡體   English   中英

Android opengl觸摸事件

[英]Android opengl Touch Event

我正在嘗試制作一個程序,在我觸摸屏幕的位置上創建信號基礎。這意味着我可以用手指改變水平線上的每個點。
但我不能讓你這樣做,因為它對你來說會很復雜,所以我想要一個圓圈跟隨我的手指。
我提到我沒有使用MyGLSurfaceView類,我只使用MyGLRenderer類(名為GL_Render.java):

public class GL_Render implements Renderer
{
    private Context context;


    private Polygon myPoly = new Polygon();
    private desen myDesen= new desen();

    private MainActivity mySignal = new MainActivity();
    private MainActivity myAngle = new MainActivity();
    private MainActivity myZoom = new MainActivity();



    public GL_Render(Context context)
    {
        this.context = context;
    }


    public void onDrawFrame(GL10 gl) 
    {       
        float ZOOM =myZoom.zoom;
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();   // reset the matrix to its default state

        // When using GL_MODELVIEW, you must set the view point
        GLU.gluLookAt(gl, 0f,     0,   -3,      0f,    0f,      0f,    0f,  1.0f, 0.0f);
      //GLU.gluLookAt(gl, eyeX, eyeY, eyeZ, centerX, centerY, centerZ, upX, upY,   upZ);


     //   float ratio = (float)( width / height  ) ;
        gl.glMatrixMode(GL10.GL_PROJECTION);        // set matrix to projection mode
        gl.glLoadIdentity();                        // reset the matrix to its default state
        if(ZOOM==0){
        gl.glFrustumf(0f, -1f, -1, 1, 3, 7);  // apply the projection matrix
        //gl.glFrustumf(left, right, bottom, top, zNear, zFar);
        }
        else
        {
              gl.glFrustumf(0f, -1f/(2*ZOOM), -1, 1, 3, 7);  // apply the projection matrix
            //gl.glFrustumf(left, right, bottom, top, zNear, zFar);

        }

        myDesen.Desen(gl);



        if(ZOOM!=0)
        {
        float l2[] =
            {
                (float)0.5/(2*ZOOM),  0.5f, 0.0f,
                (float)0.5/(2*ZOOM), -0.5f, 0.0f 
            };


        myPoly.Polygon(l2);
        myPoly.draw(gl,1,0,0);
        }
        else{
            float l2[] =
                {
                    0.5f,  0.5f, 0.0f, 
                    0.5f, -0.5f, 0.0f 
                };              
            myPoly.Polygon(l2);
            myPoly.draw(gl,1,0,0);
        }

                    // Create the moving Circle here if possible:



        }



    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) 
    {

        // Adjust the viewport based on geometry changes
        // such as screen rotations
        gl.glViewport(0, 0, width, height);

        // make adjustments for screen ratio
        float ratio = (float)( width / height  ) ;
        gl.glMatrixMode(GL10.GL_PROJECTION);        // set matrix to projection mode
        gl.glLoadIdentity();                        // reset the matrix to its default state

        gl.glFrustumf(0f, -1f, -1, 1, 3, 7);  // apply the projection matrix
        //gl.glFrustumf(left, right, bottom, top, zNear, zFar);


    }

    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig arg1) 
    {
        gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

        myPoly=new Polygon();
    }

    private void GL_Prepare(GL10 gl)
    {
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
        gl.glFrontFace(GL10.GL_CW);
        gl.glEnable(GL10.GL_DEPTH_TEST);
        gl.glEnable(GL10.GL_BLEND);
        gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);     
    }

    private void GL_Finish(GL10 gl)
    {
        gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
    }


}

無論你使用什么視圖是否是GlSurfaceView,你都需要一個Touch Listener。 然后,您可以以標准方式使用觸摸偵聽器,唯一的區別是您需要將觸摸點從屏幕坐標轉換為opengl場景坐標。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM