3D Retro Wave Spin
How do I make an 3d retro wave spin?
What is a 3d retro wave spin? How do you make a 3d retro wave spin? This script and codes were developed by Eli Fitch on 28 October 2022, Friday.
3D Retro Wave Spin - Script Codes HTML Codes
<!DOCTYPE html>
<html >
<head> <meta charset="UTF-8"> <title>3D Retro Wave Spin</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"> <link rel="stylesheet" href="css/style.css">
</head>
<body> <div class="container"> <div class="vignette"></div> <div class="controls"> <button class="js-view-button" data-view="front">View Front</button> <button class="js-view-button" data-view="top">View Top</button> <button class="js-view-button" data-view="bottom">View Bottom</button> </div>
</div> <script src='https://cdnjs.cloudflare.com/ajax/libs/three.js/r79/three.min.js'></script>
<script src='https://cdn.rawgit.com/mrdoob/three.js/dev/examples/js/controls/OrbitControls.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/gsap/1.19.1/TweenMax.min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/dat-gui/0.6.3/dat.gui.min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js'></script> <script src="js/index.js"></script>
</body>
</html>
3D Retro Wave Spin - Script Codes CSS Codes
* { margin: 0; padding: 0;
}
.container { height: 100vh; width: 100%; position: relative;
}
.container canvas { position: absolute; top: 0; left: 0; height: 100%; width: 100%; z-index: 1;
}
.vignette { position: absolute; top: 0; left: 0; height: 100%; width: 100%; z-index: 2; background-image: -webkit-radial-gradient(rgba(0, 0, 0, 0) 50%, rgba(0, 0, 0, 0.2) 100%); background-image: radial-gradient(rgba(0, 0, 0, 0) 50%, rgba(0, 0, 0, 0.2) 100%); pointer-events: none;
}
.controls { position: absolute; top: 0; left: 0; z-index: 3; padding: 1rem;
}
.controls button { -webkit-appearance: none; border: none; outline: none; padding: 1rem; margin-right: 1rem; margin-bottom: 1rem; background-image: -webkit-linear-gradient(45deg, #7A80FF, #B380F4); background-image: linear-gradient(45deg, #7A80FF, #B380F4); color: #fafafa; letter-spacing: 0.1rem; text-transform: uppercase; cursor: pointer;
}
.dg.ac { z-index: 100 !important;
}
3D Retro Wave Spin - Script Codes JS Codes
'use strict';
var container = document.getElementsByClassName('container')[0];
var orthoFactor = 2;
var params = { STRETCH_FACTOR: 10, AMPLITUDE_FACTOR: 1, SPEED_FACTOR: 2, LAYERS: 100
};
var viewButtons = document.querySelectorAll('.js-view-button');
var renderer = undefined;
var camera = undefined;
var controls = undefined;
var scene = undefined;
function init() { var w = container.offsetWidth; var h = container.offsetHeight; renderer = new THREE.WebGLRenderer({ antialias: true }); renderer.setSize(w, h); renderer.setClearColor(0xEFEFEF); renderer.setPixelRatio(window.devicePixelRatio); container.appendChild(renderer.domElement); scene = new THREE.Scene(); var cameraLeft = w / -orthoFactor; var cameraRight = w / orthoFactor; var cameraTop = h / orthoFactor; var cameraBottom = h / -orthoFactor; camera = new THREE.OrthographicCamera(cameraLeft, cameraRight, cameraTop, cameraBottom, 1, 100); camera.position.set(10, 0, 0); camera.lookAt(scene.position); controls = new THREE.OrbitControls(camera, renderer.domElement); controls.enableDamping = true; controls.dampingFactor = 0.2; controls.rotateSpeed = 0.3; var hemilight = new THREE.HemisphereLight(0xFFFFFF, 0xFAFAFA, 2); scene.add(hemilight); scene.add(camera); createMeshTornado(scene, params, camera); console.log('render'); render();
}
function render() { window.requestAnimationFrame(render); renderer.render(scene, camera); controls.update();
}
function createMeshTornado(scene, params, camera) { var amplitude = params.AMPLITUDE_FACTOR * params.LAYERS; var stretch = params.LAYERS / params.STRETCH_FACTOR; var mat = new THREE.MeshNormalMaterial(); var baseSize = { x: 0.5, y: 0.1, z: 0.5 }; var basePosition = { x: 0.0, y: 0.0, z: 0.0 }; var containerObj = new THREE.Object3D(); containerObj.name = 'mario'; // containerObj.position.set(0, -(params.LAYERS*baseSize.y/2), 0); for (var i = 0; i < params.LAYERS + 0; i++) { var oscillator = (1 - Math.cos(2 * Math.PI * (i / amplitude))) / stretch; var x = baseSize.x * i * oscillator; var y = baseSize.y; var z = baseSize.z * i * oscillator; var geo = new THREE.BoxGeometry(x, y, z); var box = new THREE.Mesh(geo, mat); box.position.set(0, y * i, 0); TweenMax.to(box.rotation, params.LAYERS / params.SPEED_FACTOR / i, { y: Math.PI, repeat: -1, ease: Power0.easeNone }); containerObj.add(box); } scene.add(containerObj); //For centering the meshGroup var viewBox = new THREE.Box3().setFromObject(containerObj); viewBox.center(containerObj.position); containerObj.localToWorld(viewBox); containerObj.position.multiplyScalar(-1); //For fitting the object to the screen when using orthographic camera camera.zoom = Math.min(container.offsetWidth / (viewBox.max.x - viewBox.min.x), container.offsetHeight / (viewBox.max.y - viewBox.min.y)) * 0.8; camera.updateProjectionMatrix(); camera.updateMatrix();
}
function makeGui() { var gui = new dat.GUI(); var layers = gui.add(params, 'LAYERS', 10, 200); var stretch = gui.add(params, 'STRETCH_FACTOR', 2, 20); var amp = gui.add(params, 'AMPLITUDE_FACTOR', 0.5, 2); var speed = gui.add(params, 'SPEED_FACTOR', 0.5, 10); function handleOnChange(val) { scene.remove(scene.getObjectByName('mario')); scene.add(createMeshTornado(scene, params, camera)); } layers.onFinishChange(handleOnChange); stretch.onFinishChange(handleOnChange); amp.onFinishChange(handleOnChange); speed.onFinishChange(handleOnChange);
}
function handleViewButtonClick(e) { if (e.target.getAttribute('data-view') === "front") { camera.position.set(10, 0, 0); } else if (e.target.getAttribute('data-view') === "top") { camera.position.set(10, 15, 0); } else if (e.target.getAttribute('data-view') === "bottom") { camera.position.set(10, -15, 0); }
}
init();
makeGui();
window.addEventListener('resize', function () { renderer.setSize(window.innerWidth, window.innerHeight); var w = container.offsetWidth; var h = container.offsetHeight; camera.left = w / -orthoFactor; camera.right = w / orthoFactor; camera.top = h / orthoFactor; camera.bottom = h / -orthoFactor; camera.updateProjectionMatrix();
}, false);
_.forEach(viewButtons, function (el) { el.addEventListener('click', handleViewButtonClick);
});
Developer | Eli Fitch |
Username | elifitch |
Uploaded | October 28, 2022 |
Rating | 4.5 |
Size | 5,825 Kb |
Views | 34,408 |
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 |
Flexslider thumbnail modification | 13,431 Kb |
Smiley guy | 3,845 Kb |
Batman Middle Finger | 3,152 Kb |
SVG hamburger menu button | 2,602 Kb |
Cube of cubes | 6,112 Kb |
Slanty Button Mixin | 4,109 Kb |
Gradient Borders Mixin | 3,394 Kb |
Mars | 3,817 Kb |
Node DC Animated SVG Logo | 4,055 Kb |
Vanilla JS sticky header | 1,944 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 |
Fading gradient button | Insprd | 1,713 Kb |
Part 19 Bootstrap split button dropdown | Venkatesha | 1,601 Kb |
Google Chrome Icon using Pure CSS in one DIV | Grssam | 3,627 Kb |
Find The Penguin | Lelder | 2,212 Kb |
ASCII triangle image overlay | Mitchdot | 2,200 Kb |
Flat iOS 7 Safari Icon | Rss | 3,332 Kb |
Pattern lab logo | TimPietrusky | 3,666 Kb |
Vue.js Starter | Andymerskin | 1,268 Kb |
A Pen by Anoop | Anoopjohn | 330,760 Kb |
PNotify Demo | Adittmar | 1,731 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!