wavey-wind/anim.js

228 lines
5.1 KiB
JavaScript
Raw Normal View History

2017-09-26 20:11:20 +02:00
console.log("Hello, Sky!");
2017-10-05 02:12:16 +02:00
/**** ******
/ Parametri razni *
************/
// Odmik kamere
var odmik_kamere = 100;
// Rotacija kamere
2017-10-05 02:33:44 +02:00
var cam_rot_offset = 1;
2017-10-05 02:12:16 +02:00
// Vidni kot
2021-08-14 15:15:16 +02:00
var FOV = 90;
2017-10-05 02:12:16 +02:00
// Sirina in visina objektov
2021-08-14 15:15:16 +02:00
var width = 6;
2017-10-05 02:12:16 +02:00
2017-10-05 02:52:46 +02:00
// Limit stevila objektov
2021-08-14 15:15:16 +02:00
var obj_limit = 600;
2017-10-05 02:33:44 +02:00
2017-10-05 02:12:16 +02:00
// Prvotno prazno polje objektov. Lahko bi kak buffer to bil pozneje
var objekti = [];
2017-10-05 02:33:44 +02:00
// Stevec, za razno animiranje
var stevec = 0;
2017-10-05 02:12:16 +02:00
2021-08-14 15:15:16 +02:00
var gostota_obj = 1;
2017-10-05 02:12:16 +02:00
// Parametri animacije
2021-08-14 15:15:16 +02:00
var drotacijaX = 0.006;
var drotacijaY = 0.001;
var drotacijaZ = 0.003;
var rotacijaX = 0;
var rotacijaY = 0;
var rotacijaZ = 0;
2017-10-05 02:12:16 +02:00
2017-10-05 02:52:46 +02:00
// Premik obstojecih barv
2021-08-14 15:15:16 +02:00
var zamikBarve = 1;
2017-10-05 02:52:46 +02:00
// Zamik pri novem objektu
var barva_mod = 0.333;
var saturacija = 1;
var svetlost = 0.4;
2017-10-05 02:12:16 +02:00
2021-08-14 15:15:16 +02:00
var kameraX = 0;
var kameraY = 0;
var kameraZ = 0;
2017-10-05 02:12:16 +02:00
// Scena, kamera in render
2017-09-26 20:11:20 +02:00
scene = new THREE.Scene;
2017-10-05 03:15:33 +02:00
camera = new THREE.PerspectiveCamera(FOV, window.innerWidth / window.innerHeight, 0.1, 2000);
2017-10-05 02:12:16 +02:00
camera.position.z = odmik_kamere;
2017-09-26 20:11:20 +02:00
renderer = new THREE.WebGLRenderer({
alpha: true
});
renderer.setSize(window.innerWidth, window.innerHeight);
2017-10-05 01:37:36 +02:00
// Belo ozadje
//renderer.setClearColor(0xFFFFFF, 1);
// Črno ozadje
renderer.setClearColor(0x000000, 1);
2017-09-26 20:11:20 +02:00
2017-10-05 02:12:16 +02:00
2017-10-05 02:33:44 +02:00
function render () {
requestAnimationFrame(render);
stevec += 1;
// Dodaj objekt vcasih
2017-10-05 02:52:46 +02:00
if (stevec % gostota_obj === 0) {
2021-08-14 15:15:16 +02:00
addObj(width, width);
2017-10-05 02:33:44 +02:00
}
renderer.render(scene, camera);
objAnim();
camRotate();
};
// Funkcija za animacijo objektov
function objAnim() {
2021-08-14 15:15:16 +02:00
objekti.map(function (obj) {
obj.rotation.x += drotacijaX / 100;
obj.rotation.y += drotacijaY / 100;
obj.rotation.z += drotacijaZ / 100;
2017-10-05 02:52:46 +02:00
2021-08-14 15:15:16 +02:00
obj.scale.z += width / 4;
obj.scale.y += width / 4;
obj.scale.x += width / 4;
2017-10-05 02:52:46 +02:00
2021-08-14 15:15:16 +02:00
obj.material.color.offsetHSL(zamikBarve, 0, 0);
});
2017-10-05 02:12:16 +02:00
};
// Funkcija za dodajanje novih objektov
function addObj(w, h) {
2017-09-26 20:11:20 +02:00
var col = new THREE.Color();
2017-10-05 02:52:46 +02:00
col.setHSL(stevec * barva_mod, saturacija, svetlost);
2017-09-26 20:11:20 +02:00
var mat = new THREE.LineBasicMaterial({
color: col
});
var geo = new THREE.Geometry();
2017-10-05 02:12:16 +02:00
var offset = h / 2;
2017-09-26 20:11:20 +02:00
geo.vertices.push(new THREE.Vector3(-offset, 0, 0), new THREE.Vector3(0, offset, 0));
geo.vertices.push(new THREE.Vector3(-offset, 0, 0), new THREE.Vector3(0, -offset, 0));
geo.vertices.push(new THREE.Vector3(offset, 0, 0), new THREE.Vector3(0, offset, 0));
geo.vertices.push(new THREE.Vector3(offset, 0, 0), new THREE.Vector3(0, -offset, 0));
2017-10-05 02:12:16 +02:00
var obj = new THREE.Line(geo, mat, THREE.LineSegments);
2017-09-26 20:11:20 +02:00
2017-10-05 02:12:16 +02:00
scene.add(obj);
2021-08-14 15:15:16 +02:00
obj.rotation.x = rotacijaX;
obj.rotation.y = rotacijaY;
obj.rotation.z = rotacijaZ;
2017-10-05 02:52:46 +02:00
// Pocisti za seboj
if (objekti.push(obj) > obj_limit) {
while (objekti.length > obj_limit) {
scene.remove(objekti[0]);
objekti.shift();
}
2017-10-05 02:52:46 +02:00
}
2017-09-26 20:11:20 +02:00
};
2017-10-05 03:15:33 +02:00
var xAksa = new THREE.Vector3(0, 1, 0);
2017-09-26 20:11:20 +02:00
function camRotate () {
2021-08-14 15:15:16 +02:00
// rotiraj po z osi
camera.translateX(kameraX);
camera.translateZ(odmik_kamere - Math.sqrt(Math.pow(odmik_kamere, 2) + Math.pow(kameraX, 2)));
2017-10-05 01:37:36 +02:00
2021-08-14 15:15:16 +02:00
/*
camera.translateY(kameraY);
camera.translateX(odmik_kamere - Math.sqrt(Math.pow(odmik_kamere, 2) + Math.pow(kameraY, 2)));
2017-10-05 01:37:36 +02:00
2021-08-14 15:15:16 +02:00
camera.translateZ(kameraZ);
camera.translateX(odmik_kamere - Math.sqrt(Math.pow(odmik_kamere, 2) + Math.pow(kameraZ, 2)));
2017-10-05 03:15:33 +02:00
2021-08-14 15:15:16 +02:00
*/
/*
camera.position.x = Math.sin((stevec % 10) / 10) * cam_rot_offset;
camera.position.y = Math.cos((stevec % 10) / 10) * cam_rot_offset;
*/
2017-10-06 23:20:52 +02:00
2021-08-14 15:15:16 +02:00
camera.lookAt(scene.position);
2017-09-26 20:11:20 +02:00
};
// Inicializiraj
document.onreadystatechange = function () {
if (document.readyState === 'complete') {
document.getElementById("anim-container").appendChild(renderer.domElement);
render();
}
2017-10-05 01:37:36 +02:00
};
// Lep risajz
function onWindowResize() {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth, window.innerHeight);
2017-09-26 20:11:20 +02:00
}
2017-10-05 01:37:36 +02:00
window.addEventListener('resize', onWindowResize, false);
2021-08-14 15:15:16 +02:00
var keysPressed = [0, 0, 0, 0];
var gyro = [0, 0, 0];
var accel = [0, 0, 0];
const getVal = function (msg) {
return msg.value;
}
oscCallbacks = {
'/keys/': [
function(args) {
keysPressed = args.map(getVal);
}
],
'/gyro/': [
function (args) {
var [gx, gy, gz] = args.map(getVal);
console.log(keysPressed)
if (keysPressed[0] && keysPressed[1] && keysPressed[2] && keysPressed[3]) {
window.location.reload()
}
if (keysPressed[2]) {
rotacijaX += gyro[0] - gx
rotacijaY += gyro[1] - gy
rotacijaZ += gyro[2] - gz
}
if (keysPressed[3]) {
drotacijaX += gyro[0] - gx
drotacijaY += gyro[1] - gy
drotacijaZ += gyro[2] - gz
}
if (keysPressed[1]) {
kameraX += gyro[0] - gx
FOV += (gyro[1] - gy) * 10
//kameraY += gyro[1] - gy
//kameraZ += gyro[2] - gz
}
if (keysPressed[0]) {
zamikBarve *= 1 + (gx - gyro[0])
obj_limit *= 1 + (gy - gyro[1])
width *= 1 + (gz - gyro[2])
}
gyro = [gx, gy, gz]
}
]
}