Android OpenGl移动相机和绘图对象

时间:2013-02-02 16:11:11

标签: java android opengl-es camera rotation

我正在创建一个应用程序,它应该在场景中的恒定位置绘制对象,但是当我移动手机时,相机应该更改视图,我应该看到所有对象(当我用手机完全旋转时)。

当我在我的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);

我的物体一直在屏幕上的同一个地方,并跟随相机移动。我在第二个例子中做错了什么?

1 个答案:

答案 0 :(得分: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在你的情况下。或者你想要达到的效果。)