diff --git a/osctl.js b/osctl.js index bd67a44..a62735a 100644 --- a/osctl.js +++ b/osctl.js @@ -4,7 +4,7 @@ var oscPort = new osc.WebSocketPort({ }); function sendAll (address, args) { - console.log('posiljam', address, args) + //console.log('posiljam', address, args) oscPort.send({ address, args }) } diff --git a/test.js b/test.js index c34d300..3903f04 100644 --- a/test.js +++ b/test.js @@ -23,7 +23,7 @@ var accX = 0.000; var accY = 0.000; var accZ = 0.000; -var deformiraj = false; +var deformiraj = 0; // Scena, kamera in render var scene = new THREE.Scene; @@ -190,6 +190,8 @@ var barvnePaleteIdx = [0, 0, 0, 0] /********* * ZOGICE * *********/ +var zogice = false +var kegli = false /* var barvnaPaleta = [ new THREE.Color(0x003F5C), @@ -238,11 +240,21 @@ function novaKrogla () { } function spremeniZoom (kolicina) { - const noviZum = camera.position.z + kolicina - if (noviZum > 10 && noviZum < 100) { + const noviZum = camera.position.z * (1 + kolicina / 25) + console.log(noviZum) + if ((noviZum > 10) && (noviZum < 300)) { camera.position.z = noviZum } } +function spremeniDeformiraj (kolicina) { + const noviDeformiraj = deformiraj + (kolicina / 2) + //console.log('deform', noviDeformiraj) + if (noviDeformiraj > 0) { + deformiraj = noviDeformiraj + } else { + deformiraj = 0 + } +} //skupina.add(kegel); @@ -278,6 +290,9 @@ scene.rotation.z = 270; //skupina.position.z = 32; //skupina.position.y = -100; +var cakajDeformiraj = false +var cakajZogice = false +var cakajKegli = false function inputHandle () { if (kbdPressed.c) { calibrate = true; @@ -287,8 +302,38 @@ function inputHandle () { sendAll('/ww/reload'); window.location.reload(); } - if (kbdPressed.d) { + /* + if (kbdPressed.d && !cakajDeformiraj) { deformiraj = !deformiraj + cakajDeformiraj = true + const args = [{ + type: "f", + value: deformiraj + }]; + sendAll('/ww/zoom', args) + setTimeout(() => cakajDeformiraj = false, 200) + } + */ + if (kbdPressed.g && !cakajZogice) { + zogice = !zogice + cakajZogice = true + const args = [{ + type: "i", + value: zogice ? 1 : 0 + }]; + sendAll('/ww/zogice', args) + setTimeout(() => cakajZogice = false, 200) + } + if (kbdPressed['l'] && !cakajKegli) { + kegli = !kegli + console.log('sprememba kegli', kegli) + cakajKegli = true + const args = [{ + type: "i", + value: kegli ? 1 : 0 + }]; + sendAll('/ww/kegli', args) + setTimeout(() => cakajKegli = false, 200) } } @@ -307,6 +352,8 @@ function render () { } }; +var cakajDodatni = false + // Funkcija za animacijo objektov function objAnim() { // Rotacija kegla @@ -320,16 +367,13 @@ function objAnim() { // Deformiranje kegla! // Random 500 zamaknemo - if (deformiraj) { - var koti = obj.geometry.attributes.position.array; - var faktorD = 5; - for (var i = 0; i < 500; i++) { - koti[Math.floor(Math.random() * koti.length)] += (Math.random() - 1) * faktorD; - } + var koti = obj.geometry.attributes.position.array; + var faktorD = 5; + for (var i = 0; i < 500; i++) { + koti[Math.floor(Math.random() * koti.length)] += (Math.random() - 1) * deformiraj; } // In priblizamo osnovni geometriji - var koti = kegel.geometry.attributes.position.array; for (var i = 0; i < koti.length; i++) { koti[i] = (geo.attributes.position.array[i] - koti[i]) * 0.75; } @@ -351,7 +395,7 @@ function objAnim() { obj.translateOnAxis(obj.premakniAxis, obj.premakniKolicina); // obj.material.color.offsetHSL(0, 0, 0.003); - obj.material.opacity *= 0.98; + obj.material.opacity *= 0.998; obj.premakniKolicina *= 0.98; var dQ = obj.quaternion.multiply(obj.rotirajQ); @@ -399,35 +443,42 @@ function objAnim() { kegel.scale.z *= 0.95; } + // kegel.material.color.offsetHSL(2 / 1000, 0, 0); // Dupliranje keglov - //console.log(accX); - kegel.material.color.offsetHSL(2 / 1000, 0, 0); - if (accX > 1/* && (stevec % 10) == 0*/) { - var dodatni = kegel.clone(); - dodatni.renderOrder = stevec; - var dodatniMat = kegel.material.clone(); - //var dodatniBarva = barvaDodatni.clone(); - var bId = izbranKegel == 0 ? 0 : 1 - var dodatniBarva = new THREE.Color(barvnePalete[bId][barvnePaleteIdx[bId]]) - dodatniMat.color = dodatniBarva; - dodatni.material = dodatniMat; - dodatni.premakniAxis = new THREE.Vector3( - Math.random(), - Math.random(), - Math.random() - ); - dodatni.premakniKolicina = (Math.random() - 1) * 10; - var rQ = qWW.clone(); - rQ.invert(); - rQ.multiply(qPrej); - dodatni.rotirajQ = rQ; + if (kegli) { + var vsota = Math.abs(accX) + Math.abs(accZ) + if (vsota > 2 && !cakajDodatni) { + cakajDodatni = true + var dodatni = kegel.clone(); + dodatni.renderOrder = stevec; + var dodatniMat = kegel.material.clone(); + //var dodatniBarva = barvaDodatni.clone(); + var bId = izbranKegel == 0 ? 0 : 1 + var dodatniBarva = new THREE.Color(barvnePalete[bId][barvnePaleteIdx[bId]]) + dodatniMat.color = dodatniBarva; + dodatni.material = dodatniMat; + dodatni.premakniAxis = new THREE.Vector3( + Math.random(), + Math.random(), + Math.random() + ); + dodatni.premakniKolicina = vsota; + var rQ = qWW.clone(); + rQ.invert(); + rQ.multiply(qPrej); + dodatni.rotirajQ = rQ; - //dodatni.qStart = kegel.quaternion.clone(); - dodatniObjekti.push(dodatni); - scene.add(dodatni); - barvnePaleteIdx[bId] = (barvnePaleteIdx[bId] + 1) % barvnePalete[bId].length; + //dodatni.qStart = kegel.quaternion.clone(); + dodatniObjekti.push(dodatni); + scene.add(dodatni); + barvnePaleteIdx[bId] = (barvnePaleteIdx[bId] + 1) % barvnePalete[bId].length; + } + if (cakajDodatni && vsota < 1) { + cakajDodatni = false + } } + }; @@ -480,10 +531,21 @@ oscCallbacks['/ww/reload'] = function () { window.location.reload(); }; oscCallbacks['/ww/zoom'] = args => { - console.log('dobil zoom', args) const [kolicina] = args.map(getVal) spremeniZoom(kolicina) } +oscCallbacks['/ww/deformiraj'] = args => { + const [kolicina] = args.map(getVal) + spremeniDeformiraj(kolicina) +} +oscCallbacks['/ww/kegli'] = args => { + const [ali] = args.map(getVal) + kegli = ali +} +oscCallbacks['/ww/zogice'] = args => { + const [ali] = args.map(getVal) + zogice = ali +} oscCallbacks['/midi-in'] = function (args) { //console.log("MAMOMO MIDI!", args); var minus = (izbranKegel == 1) ? -1 : 1; @@ -500,10 +562,12 @@ oscCallbacks['/midi-in'] = function (args) { //kegel.scale.y *= 1 + (args[2] / 100000); //kegel.scale.z *= 1 + (args[2] / 100000); - novaKrogla(); - var bId = izbranKegel == 0 ? 2 : 3 - console.log('id barve:', bId) - barvnePaleteIdx[bId] = (barvnePaleteIdx[bId] + 1) % barvnePalete[bId].length; + if (zogice) { + novaKrogla(); + var bId = izbranKegel == 0 ? 2 : 3 + console.log('id barve:', bId) + barvnePaleteIdx[bId] = (barvnePaleteIdx[bId] + 1) % barvnePalete[bId].length; + } }; @@ -527,13 +591,22 @@ window.addEventListener('keyup', e => { window.addEventListener('mousedown', e => { e.preventDefault() - kbdPressed['miska'] = true + switch (e.button) { + case 0: + kbdPressed['miska'] = true + break; + case 2: + kbdPressed['miskaD'] = true + } return false }) window.addEventListener('mouseup', e => { if ('miska' in kbdPressed) { kbdPressed['miska'] = false } + if ('miskaD' in kbdPressed) { + kbdPressed['miskaD'] = false + } }) var skrolam = false; @@ -549,4 +622,14 @@ window.addEventListener('mousemove', e => { }]; sendAll('/ww/zoom', args) } + if (kbdPressed['miskaD']) { + const sprememba = (e.movementX + e.movementY) / 10 + + spremeniDeformiraj(sprememba) + const args = [{ + type: "f", + value: sprememba + }]; + sendAll('/ww/deformiraj', args) + } })