Search code examples
opengl-esopengl-es-2.0projection-matrix

How to convert opengl projection matrix between lhs and rhs?


I've got a lhs shader but happens to got a rhs projection matrix, how to convert between them?


Solution

  • code from Qt:

    /*!
        Flips between right-handed and left-handed coordinate systems
        by multiplying the y and z co-ordinates by -1.  This is normally
        used to create a left-handed orthographic view without scaling
        the viewport as ortho() does.
    
        \sa ortho()
    */
    void QMatrix4x4::flipCoordinates()
    {
        if (flagBits == Scale || flagBits == (Scale | Translation)) {
            m[1][1] = -m[1][1];
            m[2][2] = -m[2][2];
        } else if (flagBits == Translation) {
            m[1][1] = -m[1][1];
            m[2][2] = -m[2][2];
            flagBits |= Scale;
        } else if (flagBits == Identity) {
            m[1][1] = -1.0f;
            m[2][2] = -1.0f;
            flagBits = Scale;
        } else {
            m[1][0] = -m[1][0];
            m[1][1] = -m[1][1];
            m[1][2] = -m[1][2];
            m[1][3] = -m[1][3];
            m[2][0] = -m[2][0];
            m[2][1] = -m[2][1];
            m[2][2] = -m[2][2];
            m[2][3] = -m[2][3];
            flagBits = General;
        }
    }