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 |
Vanilla JS sticky header | 1,944 Kb |
Batman Middle Finger | 3,152 Kb |
Neon slicey cube | 5,020 Kb |
Animated SVG Hexagon | 3,470 Kb |
Flexslider thumbnail modification | 13,431 Kb |
Smiley guy | 3,845 Kb |
Mars | 3,817 Kb |
Slanty Button Mixin | 4,109 Kb |
SVG hamburger menu button | 2,602 Kb |
Animated multi-line underline | 3,247 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 |
A Pen by Xand0r | Xand0r | 1,928 Kb |
3D-box | Parthviroja | 2,346 Kb |
Price table | Serluk | 5,928 Kb |
Bubble animation | Ftabor | 6,565 Kb |
Hovers with popups | Zacharyolson | 2,380 Kb |
Weather App | OmranAbazid | 2,596 Kb |
Form Labels | Bartuc | 2,717 Kb |
Popup Modal | Aldlevine | 3,696 Kb |
Electric worm | Jeffibacache | 2,377 Kb |
Resize image | Happyhj | 1,892 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!