2013-02-02 2 views
0

나는 장면에서 일정한 위치에 객체를 그려야하는 응용 프로그램을 만들지 만, 휴대 전화를 움직이면 카메라가보기를 변경해야하고 모든 객체를 볼 수 있어야합니다. 전화로 전체 회전).안드로이드 OpenGl 움직이는 카메라 및 그림 객체

난 내 onDrawFrame 방법에 gl.glMultMatrixf (rotationMatrix, 0)를 사용하여 다음의 작업을 완벽하게

@Override 
    public void onDrawFrame(GL10 gl) { 

     gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 
     gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 
     gl.glLoadIdentity(); 

     gl.glMultMatrixf(rotationMatrix, 0); 

     gl.glTranslatef(0f, 0f, -10f); 
     //draw object 
     pyramid.draw(gl); 

    } 

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

     gl.glViewport(0, 0, width, height); 
     gl.glMatrixMode(GL10.GL_PROJECTION); 
     gl.glLoadIdentity(); 
     GLU.gluPerspective(gl, 45.0f, (float) width/(float) height, 0.1f, 100.0f); 
     gl.glMatrixMode(GL10.GL_MODELVIEW); 
     gl.glLoadIdentity(); 
    } 

을 (회전 행렬이 SensorManager에서 얻을 수있다) 개체를 그릴하지만 때 내가 사용하려고하면 :

GLU.gluLookAt(gl, 0.0f, 0.0f, 0.0f, x, y, z, 0.0f, 1.0f, 0.0f); 
    gl.glPushMatrix(); 
    //draw object 
    pyramid.draw(gl); 

내 개체가 항상 화면의 같은 위치에 있고 카메라 움직임을 따라갑니다. 두 번째 예에서 내가 잘못하고있는 것은 무엇입니까?

+0

'gluLookAt' 함수는 여러분이 원점에 서서 _ (x, y, z) _를보고 있다고 말합니다. 센서로부터. 만약 당신이 세상에서 "걸어 다니고"싶다면 눈의 위치를 ​​업데이트하기 위해서'gluLookAt'의 처음 세 매개 변수를 수정해야 할 것입니다. – radical7

답변

0

glulookat()가 실제로 무엇을하는지 확실하지 않다고 생각합니다. glulookat (현재 회전 매트릭스, mylocation.x, mylocation.y, mylocation.z, whereImlooking.x, whereImlooking.y, Ivelook.z, upvector.x, upvector.y, upvector.z)를 나타내는 행렬을 묻습니다.

그 코드를 사용하면 opengl이 모든것을 회전시키고 (코드가 아직 존재한다고 가정하고) "나는 원점 (0.0, 0.0, 0.0)이고 xyz를보고있다"라고 말하고있다. (xyz가 귀하의 경우 또는 달성하고자하는 효과)