2013-09-06 5 views
0

간단한 GLsurfaceview를 사용하여 대부분의 화면을 덮는 간단한 흰색 사각형을 그립니다. OnTouchEvent()가 트리거되면 사각형은 화면에서 누른 지점에 따라 확장되거나 펼쳐집니다. 이것은 정점 위치를 적절하게 변경하여 수행됩니다.OpenGL 변경 버텍스 위치

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() 메소드

가 onTouchEvent 함유
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); 
} 

GlsurfaceView :

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

    requestRender(); 
    return true; 
} 

내 초기 생각은 화면이 onTouchEvent을 (누를 때마다)하였습니다 트리거 됨. 그런 다음 x 좌표를 렌더러로 전달하고 draw 메소드에서 vertexBuffer를 변경합니다. 이 doesnt는 2 가지의 이유를 위해 작동하는 것을 보인다 : 1. 일단 나는 전체 스크린을 덮었다. 2. 포인트 I 프레스는 잘 번역되지 않습니다. glTranslatef를 사용해 보았지만 잘못했을 수도 있습니다.

glTranslatef를 사용하는 대신 정점 위치를 변경하는 방법을 고집하고 싶습니다.

답변

0

다시 그리기 전에 화면을 지울 것을 제안합니다. 정점 위치를 직접 수정하거나 변환시 (glTranslate를 사용하여) 완료했는지는 중요하지 않습니다. 그릴 때 깨끗한 표면이 필요합니다. 그림 기능 시작 부분에

glClear(GL_COLOR_BUFFER_BIT); 

을 추가하십시오.

+0

이렇게하면 첫 번째 문제가 해결됩니다. 그러나 더 큰 문제는 여전히 내가 눌러 진 점에 따라 꼭지점의 위치를 ​​적절하게 변경할 수 있어야한다는 것입니다. – JY2k

+0

@JonathanYarkoni : 어떤 유형이'vertexBuffer'인지. 그 방법은 당신이 원하는 값으로 대체하는 대신 새로운 원소를 삽입하는 * 것일 수 있습니다. – datenwolf

+0

nope. 예상대로 반응하지 않기 때문입니다. 내 정점이 화면에서 움직이는 것보다 더 많이 움직입니다. – JY2k

관련 문제