importScripts('config.js'); cube = { tens : [ [ -1, +1, -1 ], //0 [ +1, +1, -1 ], //1 [ +1, -1, -1 ], //2 [ -1, -1, -1 ], //3 [ -1, +1, +1 ], //4 [ +1, +1, +1 ], //5 [ +1, -1, +1 ], //6 [ -1, -1, +1 ], //7 ], mens : [ [ 0,1,2,3 ], //正面 [ 5,4,7,6 ], //背面 [ 1,0,4,5 ], //天面 [ 2,6,7,3 ], //底面 [ 0,3,7,4 ], //左面 [ 5,6,2,1 ], //右面 ], scale : 10, } models = new Array(); let areaX = 600; let areaY = 500; let areaZ = 700; for( let i = 0; i < numberofmodels; i++ ) { let model = { pos : [ Math.floor( Math.random() * areaX ) - areaX / 2, Math.floor( Math.random() * areaY ) - areaY / 2, 1000 + Math.floor( Math.random() * areaZ ) - areaZ / 2, ], rotateX : Math.random(), rotateY : Math.random(), } models.push( model ); } s = 50; function rotate( x, y, theta2 ) { let theta1 = Math.atan2( y, x ); let hankei = Math.sqrt( x * x + y * y ); x = Math.cos( theta1 + theta2 ) * hankei; y = Math.sin( theta1 + theta2 ) * hankei; return { X : x, Y : y }; } onmessage = function( e ) { //frame 回転 for( let i = 0; i < models.length; i++ ) { models[ i ].rotateX += .05; models[ i ].rotateY += .05; } //calc for( let j = 0; j < models.length; j++ ) { let model = models[ j ]; model.tensC = new Array(); for( let i = 0; i < cube.tens.length; i++ ) { let x = cube.tens[ i ][ 0 ]; let y = cube.tens[ i ][ 1 ]; let z = cube.tens[ i ][ 2 ]; x *= cube.scale; y *= cube.scale; z *= cube.scale; let r; //rotateY r = rotate( x, z, model.rotateY ); x = r.X; z = r.Y; //rotateX r = rotate( z, y, model.rotateX ); z = r.X; y = r.Y; x += model.pos[ 0 ]; y += model.pos[ 1 ]; z += model.pos[ 2 ]; let tenC = new Object(); tenC.h = x * ( s / z ); tenC.v = y * ( s / z ); model.tensC.push( tenC ); } } postMessage( models ); }