2013-02-02 42 views
0

我正在創建一個應用程序,它應該在場景中的不變位置繪製對象,但是當我移動手機時,相機應該改變視圖,並且應該看到周圍的所有對象(當我用手機做全面旋轉)。Android OpenGl移動相機和繪圖對象

當我在onDrawFrame方法使用gl.glMultMatrixf(rotationMatrix,0),然後繪製(從獲得的SensorManager旋轉矩陣),它的工作完美

@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(); 
    } 

對象,但是當我嘗試使用:

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的矩陣(currentrotationmatrix,mylocation.x,mylocation.y,mylocation.z,whereImlooking.x,whereImlooking.y,whereImlooking.z,upvector.x,upvector.y,upvector.z)

所以在那段代碼中,你告訴opengl旋轉一切,(假設代碼仍然存在),然後你說「我在原點(0.0,0.0,0.0)並看着xyz」(不知道xyz是什麼你的情況,或者你試圖達到什麼樣的效果。)