Является ли руководство Google по Android OpenGL неправильным обучением линейной алгебре?

После того, как я помог другому пользователю ответить на вопрос, касающийся руководства Responding to Touch Events для Android, я скачал исходный код и был весьма озадачен увиденным. Учебник, похоже, не может решить, хочет ли он использовать векторы-строки или векторы-столбцы, и мне кажется, что все смешано.

На странице Android Matrix они утверждают, что их соглашение состоит в том, что столбец -вектор/столбец -основной, что типично для OpenGL.

Я прав, или я что-то упускаю? Вот соответствующие фрагменты:

Начните с создания MVPMatrix путем умножения mProjMatrix *mVMatrix. Все идет нормально.

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

Затем они добавляют вращение к левой части MVPMatrix? Это кажется немного странным.

    // Create a rotation for the triangle
    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)

Загрузка в порядке, отличном от -.

    GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mvpMatrix, 0);

Наконец, в их шейдере векторное *умножение матриц?

    // the matrix must be included as a modifier of gl_Position
    "  gl_Position = vPosition * uMVPMatrix;" 

Сложив все это вместе, мы получим:

gl_Position = vPosition * mRotation * mProjection * mView;

Что не соответствует действительности при любом натяжении моего воображения. Есть ли какое-то объяснение, которого я не вижу, тому, что здесь происходит?

31
задан Tim 12 August 2012 в 21:37
поделиться