0

デフォルトの Android サンプル コード http://developer.android.com/training/graphics/opengl/touch.htmlを使用しています 。このサンプルでは、​​toucht イベントによって三角形を回転できます。

テスト目的で、x、y 軸による動きを追加したいだけです。三角形の動作が期待どおりではないという点。私は何を間違っていますか?

新しい行が強調表示されたチュートリアルのコード:

public void onDrawFrame(GL10 unused) {

        // Draw background color
        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);

        // Set the camera position (View matrix)
        Matrix.setLookAtM(mVMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);

        // Calculate the projection and view transformation
        Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mVMatrix, 0);


        // Draw square
        mSquare.draw(mMVPMatrix);



       **//Translating this matrix 'brakes' triangle
  ->      Matrix.translateM(mMVPMatrix, 0, 0, pos, -1.0f);

        //NOTHING happens here: ??? Why?
  ->      Matrix.translateM(mRotationMatrix, 0, pos, 0, -1.0f);**

        // Create a rotation for the triangle
        // long time = SystemClock.uptimeMillis() % 4000L;
        // float angle = 0.090f * ((int) time);
        Matrix.setRotateM(mRotationMatrix, 0, mAngle, 0, 0, -1.0f);

        // Combine the rotation matrix with the projection and camera view
        Matrix.multiplyMM(mMVPMatrix, 0, mRotationMatrix, 0, mMVPMatrix, 0);

        // Draw triangle
        mTriangle.draw(mMVPMatrix);
    }

デフォルトの動作:

ここに画像の説明を入力

私のコードで:

ここに画像の説明を入力

4

1 に答える 1

1

icrevコメントありがとうございます:

MVP マトリックスで平行移動/回転/スケーリングを行うことができず、期待どおりの結果が得られません。

モデルマトリックス(またはカメラの移動/回転のビューマトリックス)でオブジェクトを変換/回転する必要があります。

何をする必要があるかをよりよく理解するために、これを見てモデル ビュー プロジェクション マトリックスの目的

手順は次のとおりです。

  1. M 行列を恒等行列に設定します。平行移動または回転します。ジンバル ロックに注意してください (en.wikipedia.org/wiki/Gimbal_lock)

  2. V 行列を設定 Matrix.setLookAtM(mVMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f); 3.すでに射影行列があります(あなたの場合はmProjMatrix)

    1. multippy M * V * P で最終的な MVP 行列を取得
于 2013-04-28T16:23:51.887 に答える