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);

我的对象始终位于屏幕上的同一位置,并跟随相机移动。我在第二个例子中做错了什么?

我想你不清楚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在您的案例中是什么。

最新更新