간단한 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를 사용하는 대신 정점 위치를 변경하는 방법을 고집하고 싶습니다.
이렇게하면 첫 번째 문제가 해결됩니다. 그러나 더 큰 문제는 여전히 내가 눌러 진 점에 따라 꼭지점의 위치를 적절하게 변경할 수 있어야한다는 것입니다. – JY2k
@JonathanYarkoni : 어떤 유형이'vertexBuffer'인지. 그 방법은 당신이 원하는 값으로 대체하는 대신 새로운 원소를 삽입하는 * 것일 수 있습니다. – datenwolf
nope. 예상대로 반응하지 않기 때문입니다. 내 정점이 화면에서 움직이는 것보다 더 많이 움직입니다. – JY2k