//Projection матрица
var tan=Math.tan(angle),
A=-(zMax+zMin)/(zMax-zMin),
B=(-2*zMax*zMin)/(zMax-zMin);
return [
.5/tan, 0 , 0, 0,
0, .5*a/tan, 0, 0,
0, 0, A, -1,
0, 0, B, 0
];
...
//View матрица
//this.at.v - вектор, показывающий куда смотрит камера
//this.eye - вектор, показывающий местоположение камеры
//this.up - вектор (0,1,0)
var zaxis = new Vec3(this.at.v.x-this.eye.v.x,this.at.v.y-this.eye.v.y,this.at.v.z-this.eye.v.z).normal();
var xaxis = this.up.cross(zaxis).normal();
var yaxis = zaxis.cross(xaxis);
return [
xaxis.v.x,yaxis.v.x,zaxis.v.x,0,
xaxis.v.y,yaxis.v.y,zaxis.v.y,0,
xaxis.v.z,yaxis.v.z,zaxis.v.z,0,
-xaxis.dot(this.eye),-yaxis.dot(this.eye),-zaxis.dot(this.eye),1
];
ЧЯДНТ? В шейдере умножаю перпективу на вид на модель.
Использовать библиотеки не хочу, целью является получить опыт в математике.