0

2D Android ゲームで GL10 オブジェクトを次のように設定します。

    public void onSurfaceChanged(GL10 gl, int width, int height) {
        gl.glViewport(0, 0, width, height);

        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();

        gl.glOrthof(0, width, height, 0, -1f, 1f);

        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();
    }

この方法で GL10 オブジェクトをスケーリングすると (たとえば):

   gl.glScalef(50, 50, 0);

次に、次のような変換変換を呼び出します。

   gl.glTranslatef(1, 1, 0f);

1 ピクセルではなく 50 ピクセルの変換を行います。回転変換も同様です。

以前の変換を知らなくても、変換後の変換を行うにはどうすればよいですか? 出来ますか?

4

3 に答える 3

1

私はOpenGL教祖ではありませんが、私が使用したものはvertices次のように変化しています:

私たちが持っていたとしましょう:

    vertices = new float[12];

    vertices[0] = -0.25f;
    vertices[1] = -0.25f;
    vertices[2] = 0.0f;

    vertices[3] = -0.25f;
    vertices[4] = 0.25f;
    vertices[5] = 0.0f;

    vertices[6] = 0.25f;
    vertices[7] = -0.25f;
    vertices[8] = 0.0f;

    vertices[9] = 0.25f;
    vertices[10] =0.25f;
    vertices[11] =0.0f; 

ズームインを変更するには、次を使用しました。

            gl.glPushMatrix();

            ...   

    vertices[0] = -0.25f - 1.75f *(mGameRange - distance)/mGameRange;// dummy increase index 
    vertices[1] = -0.25f - 1.75f *(mGameRange - distance)/mGameRange;

    vertices[3] = -0.25f - 1.75f *(mGameRange - distance)/mGameRange;
    vertices[4] = 0.25f + 1.75f *(mGameRange - distance)/mGameRange;


    vertices[6] = 0.25f + 1.75f *(mGameRange - distance)/mGameRange;
    vertices[7] = -0.25f - 1.75f *(mGameRange - distance)/mGameRange;

    vertices[9] = 0.25f + 1.75f *(mGameRange - distance)/mGameRange;
    vertices[10] =0.25f + 1.75f *(mGameRange - distance)/mGameRange;


            vertexBuffer.clear();
    vertexBuffer.put(vertices);
    vertexBuffer.position(0);

            ...

            gl.glPopMatrix();       
于 2013-10-23T21:33:40.517 に答える