var canvas = document.querySelector('canvas');
|
|
var width = canvas.offsetWidth,
|
|
height = canvas.offsetHeight;
|
|
|
|
var renderer = new THREE.WebGLRenderer({
|
|
canvas: canvas,
|
|
antialias: true,
|
|
alpha: true
|
|
});
|
|
renderer.setPixelRatio(window.devicePixelRatio > 1 ? 2 : 1);
|
|
renderer.setSize(width, height);
|
|
renderer.setClearColor(0x000000,0);
|
|
|
|
var scene = new THREE.Scene();
|
|
|
|
var camera = new THREE.PerspectiveCamera(40, width / height, 0.1, 1000);
|
|
camera.position.set(0, 0, 350);
|
|
|
|
var sphere = new THREE.Group();
|
|
scene.add(sphere);
|
|
var material = new THREE.LineBasicMaterial({
|
|
color: 0x2169e5
|
|
});
|
|
var linesAmount = 18;
|
|
var radius = 100;
|
|
var verticesAmount = 50;
|
|
for(var j=0;j<linesAmount;j++){
|
|
var index = j;
|
|
var geometry = new THREE.Geometry();
|
|
geometry.y = (index/linesAmount) * radius*2;
|
|
for(var i=0;i<=verticesAmount;i++) {
|
|
var vector = new THREE.Vector3();
|
|
vector.x = Math.cos(i/verticesAmount * Math.PI*2);
|
|
vector.z = Math.sin(i/verticesAmount * Math.PI*2);
|
|
vector._o = vector.clone();
|
|
geometry.vertices.push(vector);
|
|
}
|
|
var line = new THREE.Line(geometry, material);
|
|
sphere.add(line);
|
|
}
|
|
|
|
function updateVertices (a) {
|
|
for(var j=0;j<sphere.children.length;j++){
|
|
var line = sphere.children[j];
|
|
line.geometry.y += 0.3;
|
|
if(line.geometry.y > radius*2) {
|
|
line.geometry.y = 0;
|
|
}
|
|
var radiusHeight = Math.sqrt(line.geometry.y * (2*radius-line.geometry.y));
|
|
for(var i=0;i<=verticesAmount;i++) {
|
|
var vector = line.geometry.vertices[i];
|
|
var ratio = noise.simplex3(vector.x*0.009, vector.z*0.009 + a*0.0006, line.geometry.y*0.009) * 15;
|
|
vector.copy(vector._o);
|
|
vector.multiplyScalar(radiusHeight + ratio);
|
|
vector.y = line.geometry.y - radius;
|
|
}
|
|
line.geometry.verticesNeedUpdate = true;
|
|
}
|
|
}
|
|
|
|
function render(a) {
|
|
requestAnimationFrame(render);
|
|
updateVertices(a);
|
|
renderer.render(scene, camera);
|
|
}
|
|
|
|
function onResize() {
|
|
canvas.style.width = '';
|
|
canvas.style.height = '';
|
|
width = canvas.offsetWidth;
|
|
height = canvas.offsetHeight;
|
|
camera.aspect = width / height;
|
|
camera.updateProjectionMatrix();
|
|
renderer.setSize(width, height);
|
|
}
|
|
|
|
var mouse = new THREE.Vector2(0.8, 0.5);
|
|
function onMouseMove(e) {
|
|
mouse.y = e.clientY / window.innerHeight;
|
|
TweenMax.to(sphere.rotation, 2, {
|
|
x : (mouse.y * 1),
|
|
ease:Power1.easeOut
|
|
});
|
|
}
|
|
|
|
requestAnimationFrame(render);
|
|
window.addEventListener("mousemove", onMouseMove);
|
|
var resizeTm;
|
|
window.addEventListener("resize", function(){
|
|
resizeTm = clearTimeout(resizeTm);
|
|
resizeTm = setTimeout(onResize, 200);
|
|
});
|