4x4 Matrix for OpenGL: What else is required ?

I am starting to get familiar with the basics of OpenGL and decided that it is a good time to make a matrix class.

The following classes works as expected for transformations.

What else do I need to add to make it sufficient and generic enough for most future projects I'd do ?

(Keep in mind that the Matrix is in column major form.)

Code:

`template<typename T>`

class vector3

{

public:

T raw[3];

vector3(T x,T y,T z){raw[0]=x;raw[1]=y;raw[2]=z;}

vector3(T* t){raw[0]=t[0];raw[1]=t[1];raw[2]=t[2];}

vector3(std::initializer_list<T> t)

{

auto it = t.begin();

raw[0]=*(it++);

raw[1]=*(it++);

raw[2]=(*it++);

};

const T& operator[](int n){return raw[n];}

};

/*Reference:

* [0][4][08][12]

* [1][5][09][13]

* [2][6][10][14]

* [3][7][11][15]

*/

template<typename T>

class matrix

{

public:

T* raw;

matrix(T unity)//Allocates an identity matrix

{

raw = new T[16];//May change this to allocate from a Allocator maintained pool

raw[0]=raw[5]=raw[10]=raw[15]=unity;

}

matrix(){};

void translate(T x,T y,T z){raw[12]=x;raw[13]=y;raw[14]=z;}

void transform(vector3<double> x,vector3<double> y, vector3<double> z)

{

//Only rotation and scaling

raw[0]=x[0];raw[1]=x[1];raw [2]=x[2];

raw[4]=y[0];raw[5]=y[1];raw [6]=y[2];

raw[8]=z[0];raw[9]=z[1];raw[10]=z[2];

}

};