0

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

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

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

4

1 回答 1

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 在您的案例。或者你想要达到什么效果。)

于 2013-02-02T20:16:36.013 回答