diff --git a/WebGLHelloAPI.js b/WebGLHelloAPI.js index 9f5d80e43de0d3b5e61c59c5e3161afc6e18b1fc..81ce32a898fa2554a0864540799cd37e0d3646cf 100644 --- a/WebGLHelloAPI.js +++ b/WebGLHelloAPI.js @@ -163,6 +163,90 @@ function initialiseShaders() { var rot_z = 0.0; +// -------------- HW3 Function -------------- +// 4 x 4 행렬과 벡터는 모두 1차원 행렬로 표현되며 Column Major 이다. + +// m에 [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] 을 넣는다. +function idMatrix(m) { + m = [ + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 + ]; + return m; +} + +// 4x4 행렬 m과 k를 곱한 결과를 m에 넣는다. +function mulMatrix(m, k) { + var res =[ + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0 + ]; + for (var i = 0; i < 4; i++) { + for (var j = 0; j < 4; j++) { + for (var l = 0; l < 4; l++) { + res[4*i+j] += m[j+4*l]*k[4*i+l]; + // console.log("res["+(4*i+j)+"] += m["+(j+4*l)+"] * k["+(4*i+l)+"]") + } + } + } + m = res; + return m; +} + +// 4x4 행렬 m과 k를 곱한 결과를 r에 넣는다. +// Changed to mulStore +function mulStoreMatrix(r, m, k) { + var r =[ + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0 + ]; + for (var i = 0; i < 4; i++) { + for (var j = 0; j < 4; j++) { + for (var l = 0; l < 4; l++) { + r[4*i+j] += m[j+4*l]*k[4*i+l]; + } + } + } + return r; +} + +// 4x4 행렬 m 과 1x4 벡터 v를 곱한 결과를 rv에 넣는다. +function mulMatrixVec(rv, m, v) { + rv = [0,0,0,0]; + for (var j = 0; j < 4; j++) { + for (var l = 0; l < 4; l++) { + rv[j] += m[j+4*l]*v[l]; + // console.log("rv["+(j)+"] += m["+(j+4*l)+"] * v["+(l)+"]") + } + } + return rv; +} + +// var a = [ +// 0, 1, 2, 3, +// 4, 5, 6, 7, +// 8, 9, 10, 11, +// 12, 13, 14, 15 +// ]; +// var b = [ +// 1, 0, 1, 0, +// 0, 1, 1, 0, +// 0, 0, 1, 0, +// 0, 0, 0, 1 +// ]; +// var v=[1,1,1,1]; + +// var c; +// c = mulMatrixVec(c,a,v); +// console.log(c); +// -------------------------------------------- + function renderScene() { gl.clearColor(0.2, 0.2, 0.2, 1.0);