UNPKG

vanta

Version:

3D animated backgrounds for your website

87 lines (77 loc) 2.41 kB
// Original effect by Kjetil Midtgarden Golid // https://github.com/kgolid/p5ycho/blob/master/trunk/sketch.js import P5Base, {VANTA} from './_p5Base.js' import {color2Hex, mobileCheck} from './helpers.js' let p5 = (typeof window == 'object') && window.p5 class Effect extends P5Base { static initClass() { this.prototype.p5 = true this.prototype.defaultOptions = { color: 0x98465f, backgroundColor: 0x222426, spacing: 0, chaos: 1, // speed: 1, } } constructor(userOptions) { p5 = userOptions.p5 || p5 super(userOptions) } onInit() { const t = this let sketch = function(p) { let rings = mobileCheck() ? 35 : 55 let dim_init = 50 let dim_delta = 4 let chaos_init = .2 let chaos_delta = 0.12 let chaos_mag = 20 let ox = p.random(10000) let oy = p.random(10000) let oz = p.random(10000) p.setup = function(){ t.initP5(p) // sets bg too p.strokeWeight(1) p.stroke(color2Hex(t.options.color)) p.smooth() p.noFill() //p.noLoop() } p.draw = function() { p.clear() p.translate(p.width / 2, p.height / 2) display() } function display(){ //ox+=0.04 oy-=0.02 oz+=0.00005 for(let i = 0; i < rings; i ++){ p.beginShape() for(let angle = 0; angle < 360; angle++){ let radian = p.radians(angle) let radius = (t.options.chaos * chaos_mag * getNoiseWithTime(radian, chaos_delta * i + chaos_init, oz)) + (dim_delta * i + dim_init) + (i * t.options.spacing || 0) p.vertex(radius * p.cos(radian), radius * p.sin(radian)) } p.endShape(p.CLOSE) } } // function getNoise (radian, dim){ // let r = radian % p.TWO_PI; // if(r < 0.0){r += p.TWO_PI;} // return p.noise(ox + p.cos(r) * dim, oy + p.sin(r) * dim); // } function getNoiseWithTime (radian, dim, time){ let r = radian % p.TWO_PI; if(r < 0.0){r += p.TWO_PI;} return p.noise(ox + p.cos(r) * dim , oy + p.sin(r) * dim, oz + time); } } this.p5 = new p5(sketch) } } Effect.initClass() export default VANTA.register('TRUNK', Effect)