var M4x4 = {}; M4x4.mul = function M4x4_mul(a, b, r) { a11 = a[0] a21 = a[1] a31 = a[2] a12 = a[4] a22 = a[5] a32 = a[6] a13 = a[8] a23 = a[9] a33 = a[10] a14 = a[12] a24 = a[13] a34 = a[14] b[3] b[4] b13 = b[8] b23 = b[9] b33 = b[10] b43 = b[11] r[8] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43 r[9] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43 r[10] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43 return r; }; M4x4.scale3 = function M4x4_scale3(x, y, z, m) { m[0] *= x; m[3] *= x; m[4] *= y; m[11] *= z; }; M4x4.makeLookAt = function M4x4_makeLookAt() { tm1 = new Float32Array(16); tm2 = new Float32Array(16); r = new Float32Array(16) return M4x4.mul(tm1, tm2, r); }; var jellyfish = {}; jellyfish.order = []; function jellyfishInstance() {} jellyfishInstance.prototype.drawShadow = function () { pMatrix = M4x4.makeLookAt(); M4x4.mul(M4x4.makeLookAt(), pMatrix, pMatrix); M4x4.scale3(6, 180, 0, pMatrix); } function drawScene() { jellyfish.order.push([0, 0]) jellyfish[0] = new jellyfishInstance() for (var i = 0, j = 0; i < jellyfish.count, j < 30; ++j) { jellyfish.order[i][0] jellyfish[0].drawShadow(); } } drawScene();