Skip to content

Instantly share code, notes, and snippets.

@drcircuit
Created February 27, 2019 09:24
Show Gist options
  • Select an option

  • Save drcircuit/daa341c15291c930a3c59e9f81e70933 to your computer and use it in GitHub Desktop.

Select an option

Save drcircuit/daa341c15291c930a3c59e9f81e70933 to your computer and use it in GitHub Desktop.
Some Matrix functions for 3d projection
function matrix(m){
return m || [
[1,0,0,0],
[0,1,0,0],
[0,0,1,0],
[0,0,0,1],
];
}
function projectionmatrix(fov,aspect,znear,zfar){
let fovrad = 1/Math.tan((fov/2).toRadians());
let m = matrix();
m[0][0] = aspect*fovrad;
m[1][1] = fovrad;
m[2][2] = zfar / (zfar-znear);
m[3][2] = (-zfar *znear)/(zfar-znear);
m[2][3] = 1;
m[3][3] = 0;
return m;
}
function vector4mat4x4mul(v, m){
let x = v.x * m[0][0]+v.y*m[1][0]+v.z*m[2][0]+m[3][0];
let y = v.x * m[0][1]+v.y*m[1][1]+v.z*m[2][1]+m[3][1];
let z = v.x * m[0][2]+v.y*m[1][2]+v.z*m[2][2]+m[3][2];
let w = v.x * m[0][3]+v.y*m[1][3]+v.z*m[2][3]+m[3][3];
return vector(x,y,z,w);
}
function vector(x,y,z,w){
return { x:x,y:y,z:z,w:w||1};
}
function normalizevector(v){
let x = v.x/v.w;
let y = v.y/v.w;
let z = v.z/v.w;
return vector(x,y,z);
}
//Algorithm:
//triangle = [vA,vB,vC]
//transformedTriangle = [normalizevector(vector4mat4x4mul(vA)),normalizevector(vector4mat4x4mul(vB)),normalizevector(vector4mat4x4mul(vC))]
//drawtriangle(triangle);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment