JSFiddle - React, Tailwind, and code Playground
HTML
<canvas id="canvas" width="400" height="400" ></canvas>
JavaScript
function pre(){
for(obj in arguments)
console.log(arguments[obj]);
}
function createShader(str, type) {
var shader = gl.createShader(type);
gl.shaderSource(shader, str);
gl.compileShader(shader);
if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
throw gl.getShaderInfoLog(shader);
}
return shader;
}
function createProgram(vstr, fstr) {
var program = gl.createProgram();
var vshader = createShader(vstr, gl.VERTEX_SHADER);
var fshader = createShader(fstr, gl.FRAGMENT_SHADER);
gl.attachShader(program, vshader);
gl.attachShader(program, fshader);
gl.linkProgram(program);
if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
throw gl.getProgramInfoLog(program);
}
return program;
}
function de2ra(deg){
return deg*Math.PI/180;
}
/**
* TODO mult, translate....
*/
var Matrix4= function(m){
this.M=m||new Float32Array(16);
this.set=function(x,val){
this.M[x]=val;
};
this.get=function(x){
return this.M[x];
};
this.mult=function(b){
var a=this.M;
this.M=[
a[0]*b.M[0]+a[1]*b.M[4]+a[2]*b.M[8]+a[3]*b.M[12],
a[0]*b.M[1]+a[1]*b.M[5]+a[2]*b.M[9]+a[3]*b.M[13],
a[0]*b.M[2]+a[1]*b.M[6]+a[2]*b.M[10]+a[3]*b.M[14],
a[0]*b.M[3]+a[1]*b.M[7]+a[2]*b.M[11]+a[3]*b.M[15],
a[4]*b.M[0]+a[5]*b.M[4]+a[6]*b.M[8]+a[7]*b.M[12],
a[4]*b.M[1]+a[5]*b.M[5]+a[6]*b.M[9]+a[7]*b.M[13],
a[4]*b.M[2]+a[5]*b.M[6]+a[6]*b.M[10]+a[7]*b.M[14],
a[4]*b.M[3]+a[5]*b.M[7]+a[6]*b.M[11]+a[7]*b.M[15],
a[8]*b.M[0]+a[9]*b.M[4]+a[10]*b.M[8]+a[11]*b.M[12],
a[8]*b.M[1]+a[9]*b.M[5]+a[10]*b.M[9]+a[11]*b.M[13],
a[8]*b.M[2]+a[9]*b.M[6]+a[10]*b.M[10]+a[11]*b.M[14],
a[8]*b.M[3]+a[9]*b.M[7]+a[10]*b.M[11]+a[11]*b.M[15],
a[12]*b.M[0]+a[13]*b.M[4]+a[14]*b.M[8]+a[15]*b.M[12],
a[12]*b.M[1]+a[13]*b.M[5]+a[14]*b.M[9]+a[15]*b.M[13],
a[12]*b.M[2]+a[13]*b.M[6]+a[14]*b.M[10]+a[15]*b.M[14],
a[12]*b.M[3]+a[13]*b.M[7]+a[14]*b.M[11]+a[15]*b.M[15]
];
return this;
};
};
Matrix4.identity=function(){
this.M=new...