The matrix is stored column major and access methods respect the storage format, i.e. matrix[0] yields the first column. This is also true for the vector-based constructor. However, the constructor taking 16 single elements expects its parameters row-major like the matrix is written on paper.
The positive side effect of this setup is the ability to access the base vectors of the matrix' coordinate space by accessing the vectors, i.e. matrix[3] is the translation to the origin of the local coordinate space. This is useful if you want to create your matrices from vectors, if you don't want to do that, don't worry about it.
Setting the contents of a matrix is done by the setValues() methods, accessing the values via the [] operator for access to single columns or by using getValues() to get a pointer to the first element. In general most classes in OpenSG that keep an array of elements allow access to them via getValues().
If you need to create a matrix for a specific transformation, use the setTransform() methods, which create a matrix that executes the given transformation.
Matrices also supply the standard set of matrix operations like det(), det3(), invert(), transpose(), mult() and multLeft(). There are some variants that change the matrix in place, return their results in a different matrix or get their source data from a different matrix, see the class docs for details.
The default vector/point multiplication methods multMatrixVec() and multMatrixPnt() assume that the matrix only uses the standard 3x4 elements. To use the full 4x4 matrix use multFullMatrixPnt(). As Vectors have a w coordinate of 0, compared to points which have w = 1, they don't need a full transform.
Vectors are the most common class, and they should behave like every other vector library on the planet. They are templated to simplify having variants, and the standard ones that are available are Vec4ub, Vec2us, Vec2s, Vec2f, Vec3s, Vec3f and Vec4f. They have operators for the scalar operations, and methods for everything else, see the doxygen docs for osg::VectorInterface for details. Conceptually, the 3 element vector has a w coordinate of 0, thus there is no full matrix multiplication for vectors.
Points represent positions in space, and as such they are more restricted than vectors. The available variants are Pnt2f, Pnt3f and Pnt4f. Some vector operations (dot, cross, etc.) don't make sense for points. Points can be subtracted (creating a vector), scaled and a vector can be added to or subtracted from them. If you want to represent a position, use a point. It helps keeping the concepts in order and not mix up everything just because it has the same data. When multiplied with a matrix, the w coordinate is set as 1 for 3 element points.
If you really need to get from a point to a vector or vice versa, you can use
to cast a point to a vector and back.
Colors are RGB vectors, which also have access functions to the named components. They also allow access via the HSV color model and scalar multiplication, but no other operations.
1.4.3