What’s on our mind?

Collection of articles, design, site, and resources made by designers and publisher @Menu View


var renderer = new THREE.WebGLRenderer({
    antialias: true
});
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.shadowMap.enabled = false;
renderer.shadowMap.type = THREE.PCFSoftShadowMap;
renderer.shadowMap.needsUpdate = true;

document.body.appendChild(renderer.domElement);
window.addEventListener('resize', onWindowResize, false);

function onWindowResize() {
    camera.aspect = window.innerWidth / window.innerHeight;
    camera.updateProjectionMatrix();
    renderer.setSize(window.innerWidth, window.innerHeight);
}
var camera = new THREE.PerspectiveCamera(35, window.innerWidth / window.innerHeight, 1, 500);
var scene = new THREE.Scene();
var cameraRange = 3;
var setcolor = 0x000000;

scene.background = new THREE.Color(setcolor)
scene.fog = new THREE.Fog(setcolor, 2.5, 3.5);

// SCENE
var sceneGruop = new THREE.Object3D();
var particularGruop = new THREE.Object3D();
var modularGruop = new THREE.Object3D();

function generateParticle(num, amp = 2) {
    var gmaterial = new THREE.MeshPhysicalMaterial({
        color: 0xFFFFFF,
        side: THREE.DoubleSide
    });

    var gparticular = new THREE.CircleGeometry(0.2, 5);

    for (var i = 1; i < num; i++) {
        var pscale = 0.001 + Math.abs(mathRandom(0.03));
        var particular = new THREE.Mesh(gparticular, gmaterial);
        particular.position.set(mathRandom(amp), mathRandom(amp), mathRandom(amp));
        particular.rotation.set(mathRandom(), mathRandom(), mathRandom());
        particular.scale.set(pscale, pscale, pscale);
        particular.speedValue = mathRandom(1);

        particularGruop.add(particular);
    }
}
generateParticle(200, 2);

sceneGruop.add(particularGruop);
scene.add(modularGruop);
scene.add(sceneGruop);

function mathRandom(num = 1) {
    var setNumber = -Math.random() * num + Math.random() * num;
    return setNumber;
}

// INIT
function init() {
    for (var i = 0; i < 30; i++) {
        var geometry = new THREE.IcosahedronGeometry(1);
        var material = new THREE.MeshStandardMaterial({
            shading: THREE.FlatShading,
            color: 0x111111,
            transparent: false,
            opacity: 1,
            wireframe: false
        });
        var cube = new THREE.Mesh(geometry, material);
        cube.speedRotation = Math.random() * 0.1;
        cube.positionX = mathRandom();
        cube.positionY = mathRandom();
        cube.positionZ = mathRandom();
        cube.castShadow = true;
        cube.receiveShadow = true;

        var newScaleValue = mathRandom(0.3);

        cube.scale.set(newScaleValue, newScaleValue, newScaleValue);
        cube.rotation.x = mathRandom(180 * Math.PI / 180);
        cube.rotation.y = mathRandom(180 * Math.PI / 180);
        cube.rotation.z = mathRandom(180 * Math.PI / 180);
        cube.position.set(cube.positionX, cube.positionY, cube.positionZ);
        modularGruop.add(cube);
    }
}

// CAMERA
camera.position.set(0, 0, cameraRange);
var cameraValue = false;

function cameraSet() {
    if (!cameraValue) {
        TweenMax.to(camera.position, 1, {
            z: cameraRange,
            ease: Power4.easeInOut
        });
        cameraValue = true;
    } else {
        TweenMax.to(camera.position, 1, {
            z: cameraRange,
            x: 0,
            y: 0,
            ease: Power4.easeInOut
        });
        INTERSECTED = null;
        cameraValue = false;
    }
}

// SCENE
var ambientLight = new THREE.AmbientLight(0xFFFFFF, 0.1);
scene.add(ambientLight);

var light = new THREE.SpotLight(0xFFFFFF, 3);
light.position.set(5, 5, 2);
light.castShadow = true;
light.shadow.mapSize.width = 10000;
light.shadow.mapSize.height = light.shadow.mapSize.width;
light.penumbra = 0.5;

var lightBack = new THREE.PointLight(0x0FFFFF, 1);
lightBack.position.set(0, -3, -1);

scene.add(sceneGruop);
scene.add(light);
scene.add(lightBack);

var rectSize = 2;
var intensity = 100;
var rectLight = new THREE.RectAreaLight(0x0FFFFF, intensity, rectSize, rectSize);
rectLight.position.set(0, 0, 1);
rectLight.lookAt(0, 0, 0);
scene.add(rectLight)

rectLightHelper = new THREE.RectAreaLightHelper(rectLight);
//scene.add( rectLightHelper );

// RAYCASTER
var raycaster = new THREE.Raycaster();
var mouse = new THREE.Vector2(),
    INTERSECTED;
var intersected;

function onMouseMove(event) {
    event.preventDefault();
    mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
    mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
}

function onMouseDown(event) {
    event.preventDefault();
    onMouseMove(event);
    raycaster.setFromCamera(mouse, camera);
    var intersected = raycaster.intersectObjects(modularGruop.children);
    if (intersected.length > 0) {
        cameraValue = false;
        if (INTERSECTED != intersected[0].object) {
            if (INTERSECTED) INTERSECTED.material.emissive.setHex(INTERSECTED.currentHex);

            INTERSECTED = intersected[0].object;
            INTERSECTED.currentHex = INTERSECTED.material.emissive.getHex();
            INTERSECTED.material.emissive.setHex(0xFFFF00);
            //INTERSECTED.material.map = null;
            //lightBack.position.set(INTERSECTED.position.x,INTERSECTED.position.y,INTERSECTED.position.z);

            TweenMax.to(camera.position, 1, {
                x: INTERSECTED.position.x,
                y: INTERSECTED.position.y,
                z: INTERSECTED.position.z + 3,
                ease: Power2.easeInOut
            });

        } else {
            if (INTERSECTED) INTERSECTED.material.emissive.setHex(INTERSECTED.currentHex);
            INTERSECTED = null;

        }
    }
    console.log(intersected.length);
}

function onMouseUp(event) {

}

window.addEventListener('mousedown', onMouseDown, false);
window.addEventListener('mouseup', onMouseUp, false);
window.addEventListener('mousemove', onMouseMove, false);

// RENDER
var uSpeed = 0.1;

function animate() {
    var time = performance.now() * 0.0003;
    requestAnimationFrame(animate);
    for (var i = 0, l = particularGruop.children.length; i < l; i++) {
        var newObject = particularGruop.children[i];
        newObject.rotation.x += newObject.speedValue / 10;
        newObject.rotation.y += newObject.speedValue / 10;
        newObject.rotation.z += newObject.speedValue / 10;
    };

    for (var i = 0, l = modularGruop.children.length; i < l; i++) {
        var newCubes = modularGruop.children[i];
        newCubes.rotation.x += 0.008;
        newCubes.rotation.y += 0.005;
        newCubes.rotation.z += 0.003;
        newCubes.position.x = Math.sin(time * newCubes.positionZ) * newCubes.positionY;
        newCubes.position.y = Math.cos(time * newCubes.positionX) * newCubes.positionZ;
        newCubes.position.z = Math.sin(time * newCubes.positionY) * newCubes.positionX;
    }
    particularGruop.rotation.y += 0.005;
    modularGruop.rotation.y -= ((mouse.x * 4) + modularGruop.rotation.y) * uSpeed;
    modularGruop.rotation.x -= ((-mouse.y * 4) + modularGruop.rotation.x) * uSpeed;
    camera.lookAt(scene.position);
    renderer.render(scene, camera);
}

animate();
init();