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

私のオブジェクトは常に画面上の同じ場所にあり、カメラの動きに従います。2番目の例で何が間違っていますか?

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 に答える