Wavy 3d rainbow lattice
How do I make an wavy 3d rainbow lattice?
Canvas 2d animation - livecoded. What is a wavy 3d rainbow lattice? How do you make a wavy 3d rainbow lattice? This script and codes were developed by Matei Copot on 12 June 2022, Sunday.
Wavy 3d rainbow lattice - Script Codes HTML Codes
<!DOCTYPE html>
<html >
<head> <meta charset="UTF-8"> <title>wavy 3d rainbow lattice</title> <style> /* NOTE: The styles were added inline because Prefixfree needs access to your styles and they must be inlined if they are on local disk! */ canvas { position: absolute; top: 0; left: 0;
} </style> <script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>
</head>
<body> <canvas id=c></canvas> <script src="js/index.js"></script>
</body>
</html>
Wavy 3d rainbow lattice - Script Codes CSS Codes
canvas { position: absolute; top: 0; left: 0;
}
Wavy 3d rainbow lattice - Script Codes JS Codes
var w = c.width = window.innerWidth, h = c.height = window.innerHeight, ctx = c.getContext( '2d' ), opts = { dist: 15, //units sideLen: 25, //points waveIncrement: .02, distanceWaveFactor: 50, colorIncrement: 1, colorMultiplier: 100, baseY: 60, addedY: 50, depth: 400, maxDepth: 700, rotYVel: .01, focalLength: 250, vanishPoint: { x: w / 2, y: h / 2 } }, calc = { difX: Math.sqrt( 3 ) * opts.dist, // height of a equilateral triangle difZ: opts.dist * 3 / 2, // side of a triangle ( because it goes down to a vertex ) then half a side of the triangle in the hex below: s + s/2 = s*3/2 translate: { x: -Math.sqrt( 3 ) * opts.dist * opts.sideLen / 2, z: -opts.dist * 3 / 2 * opts.sideLen / 2, y: opts.baseY }, rotY: {} }, rotY = 0, points = [], tick = 0, waveTick = 0, colorTick = 0;
function setup(){ // put hexagon points in the array for( var i = 0; i < opts.sideLen; ++i ){ var shiftZ = ( ( i + 1 ) % 2 ) / 2; for( var j = 0; j < opts.sideLen; ++j ){ var shiftX = ( j % 2 ) / 2; points.push( new Point( ( j + shiftZ ) * calc.difX + calc.translate.x, calc.translate.y, ( i + shiftX ) * calc.difZ + calc.translate.z ) ); // connect if( points[ i * opts.sideLen + j - 1 ] && j > 0 ) points[ points.length - 1 ].link( points[ i * opts.sideLen + j - 1 ] ); if( points[ ( i - 1 ) * opts.sideLen + j ] ) points[ points.length - 1 ].link( points[ ( i - 1 ) * opts.sideLen + j ] ); } }
}
function Point( x, y, z ){ this.x = x; this.y = y; this.z = z; this.screen = { x: 0, y: 0 }; this.distFromCenter = Math.sqrt( x*x + z*z ) / opts.distanceWaveFactor; this.links = [];
}
Point.prototype.link = function( point ){ this.links.push( point );
}
Point.prototype.step = function(){ var wave = -Math.sin( waveTick + this.distFromCenter ), x = this.x, y = this.y + opts.addedY * wave, z = this.z; // apply rotation around Y axis var x1 = x; x = x * calc.rotY.cos - z * calc.rotY.sin; z = z * calc.rotY.cos + x1 * calc.rotY.sin; // push back z += opts.depth; if( z < 0 ) return false; // calculate screen position var scale = opts.focalLength / z; this.screen.x = opts.vanishPoint.x + scale * x; this.screen.y = opts.vanishPoint.y + scale * y; ctx.strokeStyle = 'hsla( hue, 80%, 50%, alp )' .replace( 'hue', colorTick + wave * opts.colorMultiplier ) .replace( 'alp', 1 / this.distFromCenter ); ctx.beginPath(); for( var i = 0; i < this.links.length; ++i ){ ctx.moveTo( this.screen.x, this.screen.y ); ctx.lineTo( this.links[ i ].screen.x, this.links[ i ].screen.y ); } ctx.stroke();
}
function anim(){ window.requestAnimationFrame( anim ); ++tick; colorTick += opts.colorIncrement; waveTick += opts.waveIncrement; ctx.fillStyle = 'black'; ctx.fillRect( 0, 0, w, h ); rotY += opts.rotYVel; calc.rotY.cos = Math.cos( rotY ); calc.rotY.sin = Math.sin( rotY ); points.map( function( point ){ point.step(); } );
}
setup();
anim();
window.addEventListener( 'resize', function(){ w = c.width = window.innerWidth; h = c.height = window.innerHeight; opts.vanishPoint.x = w / 2; opts.vanishPoint.y = h / 2;
})
Developer | Matei Copot |
Username | towc |
Uploaded | June 12, 2022 |
Rating | 4.5 |
Size | 2,951 Kb |
Views | 60,720 |
Find the perfect freelance services for your business! Fiverr's mission is to change how the world works together. Fiverr connects businesses with freelancers offering digital services in 500+ categories. Find Developer!
Name | Size |
This is just a test. Tests need no love | 1,921 Kb |
Rainbow rain | 2,171 Kb |
Organic lines of staring-atness | 2,415 Kb |
Swirly electric rainbow lines | 2,505 Kb |
Eiffel Tower | 3,692 Kb |
Mathematically armonic circular lines | 2,476 Kb |
Superimpositional garden | 3,307 Kb |
Progression of ideas through willpower and motivation | 2,968 Kb |
Random curve-pathed particles of rainbowness | 2,576 Kb |
Turret of Order | 4,000 Kb |
Jasper is the AI Content Generator that helps you and your team break through creative blocks to create amazing, original content 10X faster. Discover all the ways the Jasper AI Content Platform can help streamline your creative workflows. Start For Free!
Name | Username | Size |
Hello People | Danburrows | 2,365 Kb |
JQuery AJAX reddit Exercise | Btholt | 1,777 Kb |
Parallax-ish Sliding Content | Jdsteinbach | 2,748 Kb |
Faux column absolute wrapper | Yurimorini | 1,823 Kb |
Intake Form Page 2 | Ijantje | 4,983 Kb |
NgEasyModal | Lorenzodianni | 4,159 Kb |
IbrahimJabbari-Effect21 | Ibrahimjabbari | 1,882 Kb |
Sequence.js - Sliding Horizontal Parallax | Maheshc | 4,537 Kb |
Border image | JohnRiordan | 2,120 Kb |
STAR WARS LIGHTSABER | Francoiscoron | 4,420 Kb |
Surf anonymously, prevent hackers from acquiring your IP address, send anonymous email, and encrypt your Internet connection. High speed, ultra secure, and easy to use. Instant setup. Hide Your IP Now!