Opengl Camera类 求详解,请3D数学方面的大神进来帮忙解答。

在博客上看到了一篇文章,讲Opengl Camera类的设计。
有好多内容没有看懂,求解释啊。
博客原文:
http://blog.csdn.net/hobbit1988/article/details/7956838#comments

其中以下内容都没有看懂背后的矩阵运算究竟是什么。求解答
void Camera::setModelViewMatrix()

{

float m[16];

Vector3 eVec(eye.x, eye.y,eye.z);

m[0]=u.x; m[4]=u.y; m[8]=u.z; m[12]=-eVec.dot(u);

m[1]=v.x; m[5]=v.y; m[9]=v.z; m[13]=-eVec.dot(v);

m[2]=n.x; m[6]=n.y; m[10]=n.z; m[14]=-eVec.dot(n);

m[3]=0; m[7]=0; m[11]=0; m[15]=1.0;

glMatrixMode(GL_MODELVIEW);

glLoadMatrixf(m); //用M矩阵替换原视点矩阵

}

/* 摄像机绕n、v、u轴旋转的计算函数*/

void Camera::roll(float angle)

{

float cs=cos(angle*3.14159265/180);

float sn=sin(angle*3.14159265/180);

Vector3 t(u);

Vector3 s(v);

u.set(cs*t.x-sn*s.x, cs*t.y-sn*s.y, cs*t.z-sn*s.z);

v.set(sn*t.x+cs*s.x, sn*t.y+cs*s.y, sn*t.z+cs*s.z);

setModelViewMatrix(); //每次计算完坐标轴变化后调用此函数更新视点矩阵

}

void Camera::yaw(float angle)

{

float cs=cos(angle*3.14159265/180);

float sn=sin(angle*3.14159265/180);

Vector3 t(n);

Vector3 s(u);

n.set(cs*t.x-sn*s.x, cs*t.y-sn*s.y, cs*t.z-sn*s.z);

u.set(sn*t.x+cs*s.x, sn*t.y+cs*s.y, sn*t.z+cs*s.z);

setModelViewMatrix();

}

void Camera::pitch(float angle)

{

float cs=cos(angle*3.14159265/180);

float sn=sin(angle*3.14159265/180);

Vector3 t(v);

Vector3 s(n);

v.set(cs*t.x-sn*s.x, cs*t.y-sn*s.y, cs*t.z-sn*s.z);

n.set(sn*t.x+cs*s.x, sn*t.y+cs*s.y, sn*t.z+cs*s.z);

setModelViewMatrix();

}

/* 摄像机绕三个轴平移的计算函数*/

void Camera::slide(float du, float dv, float dn)

{

eye.x+=du*u.x+dv*v.x+dn*n.x;

eye.y+=du*u.y+dv*v.y+dn*n.y;

eye.z+=du*u.z+dv*v.z+dn*n.z;

look.x+=du*u.x+dv*v.x+dn*n.x;

look.y+=du*u.y+dv*v.y+dn*n.y;

look.z+=du*u.z+dv*v.z+dn*n.z;

setModelViewMatrix();

}