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