This row-major/column-major has been a big issue of mine, especially since I understand the basics which has nothing to do with the actual issue.
Now when I realized that row-major in graphics also means that vectors are row-vectors it has become much clearer to me.
So I have made a few observations of which I would like a better understanding behind the choices.
1. OpenGL uses by default column-major matrix indexing, why is OpenTK.Math.Matrix4 using a row-major representation.
2. OpenGL is designed for column-vectors and thus calculate like this: M.v (Matrix * vector), rather than v.M
This is also the way the OpenGL online tutorials and books do, as well as how the shader code is written.
But I found out that the Matrix.Create.. functions generates matrices that assume row-vectors.
3. When I almost had got it, I tried to verify whether OpenTK was using row or column vectors. I tried to find that perhaps only M.v or v.M code was written but I found none.
The only indicator was the matrix create... methods, or rather the output they generated.
Why is there no Mult(Vector4, Matrix4) in the OpenTK.Math namespace?