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。这似乎不起作用有两个原因: 1. 一旦我覆盖了整个屏幕,无论我按哪里都无法返回。2. 我按的那个点翻译得不好。我曾尝试使用 glTranslatef 但可能做错了。

我想坚持这种改变顶点位置的方法,而不是使用 glTranslatef。

4

1 回答 1

0

我建议您在重绘之前清除屏幕。如果您自己修改顶点位置或在转换时完成(使用 glTranslate),这并不重要。你需要一个干净的表面来画画。添加一个

glClear(GL_COLOR_BUFFER_BIT);

在绘图功能的开头。

于 2013-09-06T11:03:34.320 回答