Fluid-mobius-2.1.1
How do I make an fluid-mobius-2.1.1?
Wrapping my head around quaternions and multi-pass shader effectscode for effect shaders taken from @mittense's https://codepen.io/mittense/project/details/ARwvjL. What is a fluid-mobius-2.1.1? How do you make a fluid-mobius-2.1.1? This script and codes were developed by Not Important on 16 November 2022, Wednesday.
Fluid-mobius-2.1.1 - Script Codes HTML Codes
<!DOCTYPE html>
<html >
<head> <meta charset="UTF-8"> <title>fluid-mobius-2.1.1</title> <link rel="stylesheet" href="css/style.css">
</head>
<body> <div id="js-app"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/6.20.0/polyfill.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/86/three.min.js"></script>
<script src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/292951/three.bas.js"></script>
<script src="https://threejs.org/examples/js/controls/OrbitControls.js"></script>
<!-- all of the following were taken from https://codepen.io/mittense/project/editor/ARwvjL/ -->
<script src="https://codepen.io/clindsey/pen/gxYmJd.js"></script> <!-- THREE.EffectComposer -->
<script src="https://codepen.io/clindsey/pen/eEOvwZ.js"></script> <!-- THREE.MaskPass -->
<script src="https://codepen.io/clindsey/pen/OjLper.js"></script> <!-- THREE.RenderPass -->
<script src="https://codepen.io/clindsey/pen/eEOvqZ.js"></script> <!-- THREE.ShaderPass -->
<script src="https://codepen.io/clindsey/pen/YxKZma.js"></script> <!-- THREE.UnrealBloomPass -->
<script src="https://codepen.io/clindsey/pen/NvKjKV.js"></script> <!-- THREE.ConvolutionShader -->
<script src="https://codepen.io/clindsey/pen/qXWmWX.js"></script> <!-- THREE.CopyShader -->
<script src="https://codepen.io/clindsey/pen/EvYmxW.js"></script> <!-- THREE.FXAAShader -->
<script src="https://codepen.io/clindsey/pen/dzbWyd.js"></script> <!-- THREE.FilmShader -->
<script src="https://codepen.io/clindsey/pen/OjLmJd.js"></script> <!-- THREE.LuminosityHighPassShader -->
<!-- <script>(function(){var script=document.createElement('script');script.onload=function(){var stats=new Stats();document.body.appendChild(stats.dom);requestAnimationFrame(function loop(){stats.update();requestAnimationFrame(loop)});};script.src='//rawgit.com/mrdoob/stats.js/master/build/stats.min.js';document.head.appendChild(script);})()</script> --> <script src="js/index.js"></script>
</body>
</html>
Fluid-mobius-2.1.1 - Script Codes CSS Codes
body { margin: 0; padding: 0; background-color: #000;
}
canvas { display: block; margin: 0 auto;
}
Fluid-mobius-2.1.1 - Script Codes JS Codes
'use strict';
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
setTimeout(function () { var loader = new THREE.JSONLoader(); loader.crossOrigin = 'Anonymous'; var mobiusRot = new MobiusRot(3, 291, 100, 31, 5); // tileSize, ringSize, radius, layers, twists new Simulation('js-app', [mobiusRot], 0, 0, -320);
}, 0);
var MobiusRot = function (_THREE$Mesh) { _inherits(MobiusRot, _THREE$Mesh); MobiusRot.createMaterial = function createMaterial(radius, size) { return new THREE.BAS.BasicAnimationMaterial({ shading: THREE.FlatShading, side: THREE.FrontSide, uniforms: { uTime: { value: 0 }, uRadius: { value: radius * 2 }, uSpacing: { value: new THREE.Vector3(size * 2, size * 2, size * 2) } }, uniformValues: {}, varyingParameters: ['varying vec3 vColor;'], vertexFunctions: [THREE.BAS.ShaderChunk['quaternion_rotation']], vertexParameters: ['uniform float uTime;', 'uniform float uRadius;', 'uniform vec3 uSpacing;', 'attribute vec4 aRotation;', 'attribute vec3 aVOffset;', 'attribute vec4 aTwist;', 'attribute vec4 aOrient;', 'attribute vec3 aColor;'], vertexInit: ['float timeScale = 0.333;', 'float seed = 5625463739.0;', 'float time = (uTime * timeScale);', 'vec4 tQuatRotation = quatFromAxisAngle(aRotation.xyz, aRotation.w + time);', 'vec4 tQuatOrient = quatFromAxisAngle(aOrient.xyz, aOrient.w + time);', 'vec4 tQuatTwist = quatFromAxisAngle(aTwist.xyz, aTwist.w + time);'], vertexNormal: [], vertexPosition: ['transformed += aVOffset * uSpacing;', // stack tiles into a column 'transformed = rotateVector(tQuatTwist, transformed);', // twist columns 'transformed = rotateVector(tQuatOrient, transformed);', // rotate column faces inwards 'transformed += rotateVector(tQuatRotation, vec3(uRadius, 0.0, 0.0));' // place columns in a large circle ], vertexColor: ['vColor = aColor;'], fragmentFunctions: [], fragmentParameters: [], fragmentInit: [], fragmentMap: [], fragmentDiffuse: ['diffuseColor.xyz = vColor;'] }); }; MobiusRot.assignProps = function assignProps(geometry, prefabCount, radius, layers, twists, verticalSpacing) { var aRotation = geometry.createAttribute('aRotation', 4); var aColor = geometry.createAttribute('aColor', 3); var aVOffset = geometry.createAttribute('aVOffset', 3); var aTwist = geometry.createAttribute('aTwist', 4); var aOrient = geometry.createAttribute('aOrient', 4); var ringSize = prefabCount / layers; for (var i = 0; i < prefabCount; i++) { var y = Math.floor(i / ringSize); var x = i % ringSize; var range = Math.PI * 2; var theta = THREE.Math.mapLinear(x, 0, ringSize, -range / 2, range / 2); var w = theta / 2 * twists; // place tiles in circle var position = new THREE.Vector3(Math.cos(theta), 0, Math.sin(theta)); geometry.setPrefabData(aRotation, i, [0, 1, 0, theta]); // stack the tiles vertically into columns var verticalOffset = new THREE.Vector3(0, Math.ceil(y / 2) * (y % 2 ? 1 : -1) / layers, 0); geometry.setPrefabData(aVOffset, i, verticalOffset.toArray()); // set lean geometry.setPrefabData(aTwist, i, [0, 0, 1, w]); // set orient geometry.setPrefabData(aOrient, i, [0, 1, 0, theta]); var color = new THREE.Color(); color.setHSL((theta + Math.PI) / (Math.PI * 2), 1.0, 0.5); geometry.setPrefabData(aColor, i, color.toArray()); } }; function MobiusRot(size, tileCount, radius, layers, twists) { _classCallCheck(this, MobiusRot); var prefabCount = tileCount * layers; var boxGeometry = new THREE.BoxGeometry(size, size, size); var geometry = new THREE.BAS.PrefabBufferGeometry(boxGeometry, prefabCount); geometry.computeVertexNormals(); geometry.bufferUvs(); MobiusRot.assignProps(geometry, prefabCount, radius, layers, twists, size); var material = MobiusRot.createMaterial(radius, size * layers); var _this = _possibleConstructorReturn(this, _THREE$Mesh.call(this, geometry, material)); _this.frustumCulled = false; return _this; } _createClass(MobiusRot, [{ key: 'time', get: function get() { return this.material.uniforms.uTime.value; }, set: function set(newTime) { this.material.uniforms.uTime.value = newTime; } }]); return MobiusRot;
}(THREE.Mesh);
var Simulation = function () { function Simulation(domId, entities) { var x = arguments.length <= 2 || arguments[2] === undefined ? 0 : arguments[2]; var y = arguments.length <= 3 || arguments[3] === undefined ? 0 : arguments[3]; var z = arguments.length <= 4 || arguments[4] === undefined ? 0 : arguments[4]; _classCallCheck(this, Simulation); var camera = this.createCamera(80, x, y, z, window.innerWidth, window.innerHeight); camera.target = new THREE.Vector3(0, 0, 0); camera.lookAt(camera.target); var scene = new THREE.Scene(); this.createLights(scene); var renderer = this.createRenderer(0x666666); document.getElementById(domId).appendChild(renderer.domElement); var _createComposerAndEff = this.createComposerAndEffects(scene, camera, renderer); var composer = _createComposerAndEff.composer; var effects = _createComposerAndEff.effects; var handleWindowResize = this.onWindowResize(camera, renderer, composer, effects); handleWindowResize(); window.addEventListener('resize', handleWindowResize, false); entities.map(function (e) { return scene.add(e); }); var controls = this.addControls(camera); this.animate(composer, renderer, scene, camera, controls, entities, +new Date()); } Simulation.prototype.addControls = function addControls(camera) { var controls = new THREE.OrbitControls(camera); controls.target = camera.target; controls.enableDamping = true; controls.dampingFactor = 0.1; controls.rotateSpeed = 0.1; return controls; }; Simulation.prototype.createComposerAndEffects = function createComposerAndEffects(scene, camera, renderer) { var effects = {}; var renderScene = new THREE.RenderPass(scene, camera); effects.fxaa = new THREE.ShaderPass(THREE.FXAAShader); effects.fxaa.uniforms.resolution.value.set(1 / window.innerWidth, 1 / window.innerHeight); effects.copy = new THREE.ShaderPass(THREE.CopyShader); effects.copy.renderToScreen = true; var strength = 0.5; var radius = 2.6; var threshold = 0.05; effects.bloom = new THREE.UnrealBloomPass(new THREE.Vector2(window.innerWidth, window.innerHeight), strength, radius, threshold); effects.film = new THREE.ShaderPass(THREE.FilmShader); var composer = new THREE.EffectComposer(renderer); composer.setSize(window.innerWidth, window.innerHeight); composer.addPass(renderScene); // composer.addPass(effects.film) composer.addPass(effects.fxaa); composer.addPass(effects.bloom); composer.addPass(effects.copy); renderer.gammaInput = false; renderer.gammaOutput = true; return { composer: composer, effects: effects }; }; Simulation.prototype.onWindowResize = function onWindowResize(camera, renderer, composer, effects) { return function (event) { var width = window.innerWidth; var height = window.innerHeight; camera.aspect = width / height; camera.updateProjectionMatrix(); renderer.setSize(width, height); composer.setSize(width, height); effects.fxaa.uniforms.resolution.value.set(1 / window.innerWidth, 1 / window.innerHeight); }; }; Simulation.prototype.animate = function animate(composer, renderer, scene, camera, controls, entities, lastTime) { var _this2 = this; var currentTime = +new Date(); var timeDelta = currentTime - lastTime; entities.forEach(function (e) { return e.time += timeDelta / 1000; }); requestAnimationFrame(function () { _this2.animate(composer, renderer, scene, camera, controls, entities, currentTime); }); controls.update(); composer.render(); // renderer.render(scene, camera) }; Simulation.prototype.createCamera = function createCamera(fov) { var x = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1]; var y = arguments.length <= 2 || arguments[2] === undefined ? 0 : arguments[2]; var z = arguments.length <= 3 || arguments[3] === undefined ? 0 : arguments[3]; var width = arguments[4]; var height = arguments[5]; var camera = new THREE.PerspectiveCamera(fov, width / height, 1, 1000); camera.position.x = x; camera.position.y = y; camera.position.z = z; return camera; }; Simulation.prototype.createLights = function createLights(scene) { var light = new THREE.AmbientLight('#f8845e', 1.5); scene.add(light); var hemilight = new THREE.HemisphereLight('#b82d98', '#26688f', 0.5); scene.add(hemilight); var dirLight = new THREE.DirectionalLight(0xffffff, 0.6); dirLight.color.setHSL(0.1, 1, 0.95); dirLight.position.set(-1, 1.75, 1); dirLight.position.multiplyScalar(50); scene.add(dirLight); }; Simulation.prototype.createRenderer = function createRenderer() { var clearColor = arguments.length <= 0 || arguments[0] === undefined ? 0x000000 : arguments[0]; var renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true }); renderer.setPixelRatio(window.devicePixelRatio); renderer.toneMapping = THREE.LinearToneMapping; renderer.autoClear = true; renderer.setClearColor(clearColor, 0); return renderer; }; return Simulation;
}();
Developer | Not Important |
Username | clindsey |
Uploaded | November 16, 2022 |
Rating | 4.5 |
Size | 8,472 Kb |
Views | 16,192 |
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 |
FluxTabulate | 10,632 Kb |
Learning-shaders-1.0.0 | 3,731 Kb |
StackProg | 11,744 Kb |
SquiggleCache | 2,872 Kb |
Tunnel-of-madness-1.0.0 | 7,689 Kb |
PokerCheck | 7,323 Kb |
Flame-view-1.0.0 | 5,892 Kb |
React-d3-animated-scatter-chart-2.0.0 | 7,846 Kb |
Spectrum-shift | 4,680 Kb |
DumbFound | 5,454 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 |
Pure CSS Read More Arrow | Zephyr | 1,747 Kb |
Wikipedia viewer | Chpecson | 2,865 Kb |
Pricing Table | Semenchenko | 6,784 Kb |
Force Counter | Kenlauguico | 2,732 Kb |
Particle Motion trajectories | Sniejadlik | 5,899 Kb |
Compare resources on mobile sites | Gyusza | 3,226 Kb |
Cars going | Netoguimaraes | 1,699 Kb |
Tooltip in table | Roine | 3,713 Kb |
Experiments with Vertical Centering | KatieK2 | 3,924 Kb |
Fading Navigation Bar | J-w-v | 2,805 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!