0

私は単純な GLsurfaceview を使用して、画面の大部分を覆う単純な白い正方形を描画しています。OnTouchEvent() がトリガーされると、画面上で押されたポイントに応じて正方形が拡大および縮小する必要があります。これは、それに応じて頂点の位置を変更することによって行われます。

public void onDrawFrame(GL10 gl) {
    // Set GL_MODELVIEW transformation mode
    gl.glMatrixMode(GL10.GL_MODELVIEW);
    gl.glLoadIdentity();   // reset the matrix to its default state
    // When using GL_MODELVIEW, you must set the camera view
    GLU.gluLookAt(gl, 0, 0, -5, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
    square.draw(gl, x);
}

Square.draw() メソッド:

 public void draw(GL10 gl,float x) {
    Log.d("touch", "Square.draw() called");
    vertexBuffer.put(0,-(x/480)*2);
    vertexBuffer.put(6,-(x/480)*2);

    //Set the face rotation
    gl.glFrontFace(GL10.GL_CW);

    //Point to our vertex buffer
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);

    //Enable vertex buffer
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

    //Draw the vertices as triangle strip
    gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertices.length / 3);

    //Disable the client state before leaving
    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
}

onTouchEvent を含む GlsurfaceView:

public boolean onTouchEvent(MotionEvent e) {
    float x = e.getX();
    mRenderer.x = x;

    requestRender();
    return true;
}

私の最初の考えは、画面が押されるたびに onTouchEvent() がトリガーされるというものでした。次に、x 座標をレンダラーに渡し、そこから draw メソッドに渡して vertexBuffer を変更します。これは 2 つの理由で機能しないようです。1. 画面全体をカバーすると、どこを押しても元に戻りません。2. 押した点がうまく翻訳されません。glTranslatef を使用してみましたが、間違っている可能性があります。

glTranslatef を使用するのではなく、頂点の位置を変更するこの方法に固執したいと思います。

4

1 に答える 1

0

再描画する前に画面をクリアすることをお勧めします。頂点の位置自体を変更するか、変換時に (glTranslate を使用して) 変更するかは問題ではありません。描くにはきれいな表面が必要です。を追加

glClear(GL_COLOR_BUFFER_BIT);

描画関数の先頭。

于 2013-09-06T11:03:34.320 に答える