What’s on our mind?

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

index27
var camera, renderer;
window.addEventListener('load', init);

function init() {
    renderer = new THREE.WebGLRenderer({
        canvas: document.querySelector('#myCanvas'),
        antialias: true
    });
    renderer.setPixelRatio( window.devicePixelRatio );
    renderer.setSize( window.innerWidth, window.innerHeight );

    const scene = new THREE.Scene();
    const clock = new THREE.Clock();

    camera = new THREE.PerspectiveCamera(45,  window.innerWidth / window.innerHeight);
    camera.position.set(0, 0, 1000);

    const myGroup = new MyGroup();
    scene.add(myGroup);

    onWindowResize();
    window.addEventListener( 'resize', onWindowResize, false );

    tick();

    function tick() {
        var delta = clock.getDelta();
        myGroup.update(delta);
        renderer.render(scene, camera);
        requestAnimationFrame(tick);
    }
}
class MyGroup extends THREE.Object3D {
    constructor() {
        super();
        this.uniforms = {
            "time": { value: 1.0 },
            "resolution": { type: "v2", value: new THREE.Vector2(renderer.domElement.width,renderer.domElement.height) }
        };

        this.material = new THREE.ShaderMaterial( {
            uniforms: this.uniforms,
            vertexShader: document.getElementById( 'vertexShader' ).textContent,
            fragmentShader: document.getElementById( 'fragmentShader' ).textContent
        });

        this.donuts = new THREE.Mesh(
            new THREE.SphereGeometry( 300, 100, 100),
            this.material
        );

        this.donuts.rotation.x = 20;
        this.donuts.rotation.y = 20;
        this.donuts.rotation.z = 20;

        this.add(this.donuts);
    }

    update(delta) {
        var object = this.donuts;
        object.rotation.y += delta * 0.5 * ( 1 % 2 ? 1 : - 1 );
        object.rotation.x += delta * 0.5 * ( 1 % 2 ? - 1 : 1 );
        object.material.uniforms["time"].value +=  delta* 5;
        //console.log(object.material.uniforms["time"].value)
    }
}

function onWindowResize() {
    camera.aspect = window.innerWidth / window.innerHeight;
    camera.updateProjectionMatrix();
    renderer.setSize( window.innerWidth, window.innerHeight );
}

function getRandom(min, max) {
    return Math.random() * (max - min) + min;
}