three实现三维边框小球旋转故障闪烁动画效果代码
代码语言:html
所属分类:三维
代码描述:three实现三维边框小球旋转故障闪烁动画效果代码
代码标签: three 三维 边框 小球 旋转 故障 闪烁 动画
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <style> html, body { padding: 0; margin: 0; width: 100%; height: 100%; overflow: hidden; } h1 { color: white; font-family: VT323; position: absolute; top: 70vh; left: 50vw; font-weight: normal; text-transform: uppercase; letter-spacing: 0.3em; width: 100%; transform: translate(-50%, -50%); font-size: 12px; text-align: center; } </style> </head> <body> <!-- partial:index.partial.html --> <h1>// Scanning your memories...</h1> <!-- partial --> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/three.84.js"></script> <script > function buildScene() { var scene = new THREE.Scene(); var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); var renderer = new THREE.WebGLRenderer(); var composer = new THREE.EffectComposer(renderer); renderer.setSize(window.innerWidth, window.innerHeight); composer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); function onWindowResize() { camera.aspect = window.innerWidth / window.innerHeight; camera.updateProjectionMatrix(); renderer.setSize(window.innerWidth, window.innerHeight); composer.setSize(window.innerWidth, window.innerHeight); } window.addEventListener('resize', onWindowResize, false); var cubeGroup = new THREE.Group(); scene.add(cubeGroup); function makeRing(radius, parent) { var geometry = new THREE.CylinderGeometry(radius, radius, 0.1, 64); var edges = new THREE.EdgesGeometry(geometry); var line = new THREE.LineSegments(edges, new THREE.LineBasicMaterial({ color: 0x11ee77 })); parent.add(line); return line; }; var ring0 = makeRing(3, scene); var ring1 = makeRing(3.3, ring0); var ring2 = makeRing(3.6, ring1); (function () { var geometry = new THREE.OctahedronGeometry(2, 3); var material = new THREE.MeshPhongMaterial({ color: 0x444444, opacity: 0.8, transparent: true }); var cube = new THREE.Mesh(geometry, material); cubeGroup.add(cube); var edges = new THREE.EdgesGeometry(geometry); var line = new THREE.LineSegments(edges, new THREE.LineBasicMaterial({ color: 0x1188dd })); line.scale.set(1.1, 1.1, 1.1); cubeGroup.add(line); })(); var cylinder = function () { var geometry = new THREE.CylinderGeometry(8, 8, 1000, 3); const edges = new THREE.EdgesGeometry(geometry); const cylinder = new THREE.LineSegments(edges, new THREE.LineBasicMaterial({ color: 0x444444 })); cylinder.rotation.set(Math.PI / 2, 0, 0); scene.add(cylinder); return cylinder; }(); var light = new THREE.DirectionalLight(0xFFFFFF, 1); scene.add(light); camera.position.z = 8; var renderScene = new THREE.RenderPass(scene, camera); var glitchPass = new THREE.GlitchPass(); var bloomPass = new THREE.UnrealBloomPass(new THREE.Vector2(window.innerWidth, window.innerHeight), 3, 1, 0.4); var copyShader = new THREE.ShaderPass(THREE.CopyShader); copyShader.renderToScreen = true; composer.addPass(renderScene); composer.addPass(glitchPass); composer.addPass(bloomPass); composer.addPass(copyShader); function render() { cubeGroup.rotation.x += 0.01; cubeGroup.rotation.y += 0.03; ring0.rotation.x += 0.011; ring0.rotation.y += 0.032; ring1.rotation.z += 0.013; ring1.rotation.y += 0.034; ring2.rotation.x += 0.015; ring2.rotation.y += 0.036; cylinder.rotation.y += 0.002; cylinder.rotation.x -= 0.001; cylinder.rotation.z += 0.003; requestAnimationFrame(render); composer.render(); } render(); } // Everything here down was pulled from ThreeJS Examples under postprocessing and shaders. /** * @author alteredq / http://alteredqualia.com/ * * Full-screen textured quad shader */ THREE.CopyShader = { uniforms: { "tDiffuse": { value: null }, "opacity": { value: 1.0 } }, vertexShader: [ "varying vec2 vUv;", "void main() {", "vUv = uv;", "gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", "}"]. join("\n"), fragmentShader: [ "uniform float opacity;", "uniform sampler2D tDiffuse;", "varying vec2 vUv;", "void main() {", "vec4 texel = texture2D( tDiffuse, vUv );", "gl_FragColor = opacity * texel;", "}"]. join("\n") }; /** * @author felixturner / http://airtight.cc/ * * RGB Shift Shader * Shifts red and blue channels from center in opposite directions * Ported from http://kriss.cx/tom/2009/05/rgb-shift/ * by Tom Butterworth / http://kriss.cx/tom/ * * amount: shift distance (1 is width of input) * angle: shift angle in radians */ THREE.DigitalGlitch = { uniforms: { "tDiffuse": { value: null }, //diffuse texture "tDisp": { value: null }, //displacement texture for digital glitch squares "byp": { value: 0 }, //apply the glitch ? "amount": { value: 0.08 }, "angle": { value: 0.02 }, "seed": { value: 0.02 }, "seed_x": { value: 0.02 }, //-1,1 "seed_y": { value: 0.02 }, //-1,1 "distortion_x": { value: 0.5 }, "distortion_y": { value: 0.6 }, "col_s": { value: 0.05 } }, vertexShader: [ "varying vec2 vUv;", "void main() {", "vUv = uv;", "gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", "}"]. join("\n"), fragmentShader: [ "uniform int byp;", //should we apply the glitch ? "uniform sampler2D tDiffuse;", "uniform sampler2D tDisp;", "uniform float amount;", "uniform float angle;", "uniform float seed;", "uniform float seed_x;", "uniform float seed_y;", "uniform float distortion_x;", "uniform float distortion_y;", "uniform float col_s;", "varying vec2 vUv;",.........完整代码请登录后点击上方下载按钮下载查看
网友评论0