threejs+gsap打造三维立体城市粒子穿越动画效果代码
代码语言:html
所属分类:三维
代码描述:threejs+gsap打造三维立体城市粒子穿越动画效果代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <style> body{color:white;margin:0;text-align:center;background-color:black;cursor:crosshair;}canvas{display:block;width:100%;height:100%;}p{color:rgba(255,255,255,0.5)}.header{top:42%;}.header-content{padding:50px;background-color:rgba(0,0,0,0.3);border-radius:10px;}.footer{bottom:3%;}.description{color:gray;padding-top:50px;}a,a:hover,a:visited{color:white;text-decoration:none;}.disable-selection{-moz-user-select:none;-ms-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;}h1::after{content:' Three JS';font-size:12px;position:absolute;top:3px;padding-left:5px;font-weight:400;}h2::after{content:'2';font-size:12px;position:absolute;top:14px;padding-left:5px;}.btn{border-radius:100px;padding:10px 25px;}</style> </head> <body> <div class="col"></div> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/three.r118.js"></script> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/gsap.3.5.2.js"></script> <script> var renderer = new THREE.WebGLRenderer({antialias:true}); renderer.setSize( window.innerWidth, window.innerHeight ); if (window.innerWidth > 800) { renderer.shadowMap.enabled = true; renderer.shadowMap.type = THREE.PCFSoftShadowMap; renderer.shadowMap.needsUpdate = true; }; document.body.appendChild( renderer.domElement ); window.addEventListener('resize', onWindowResize, false); function onWindowResize() { camera.aspect = window.innerWidth / window.innerHeight; camera.updateProjectionMatrix(); renderer.setSize( window.innerWidth, window.innerHeight ); }; var camera = new THREE.PerspectiveCamera( 20, window.innerWidth / window.innerHeight, 1, 500 ); camera.position.set(0, 2, 14); var scene = new THREE.Scene(); var city = new THREE.Object3D(); var smoke = new THREE.Object3D(); var town = new THREE.Object3D(); var createCarPos = true; var uSpeed = 0.001; var setcolor = 0xF02050; scene.background = new THREE.Color(setcolor); scene.fog = new THREE.Fog(setcolor, 10, 16); function mathRandom(num = 8) { var numValue = - Math.random() * num + Math.random() * num; return numValue; }; var setTintNum = true; function setTintColor() { if (setTintNum) { setTintNum = false; var setColor = 0x000000; } else { setTintNum = true; var setColor = 0x000000; }; return setColor; }; function init() { var segments = 2; for (var i = 1; i<100; i++) { var geometry = new THREE.CubeGeometry(1,0,0,segments,segments,segments); var material = new THREE.MeshStandardMaterial({ color:setTintColor(), wireframe:false, shading: THREE.SmoothShading, side:THREE.DoubleSide}); var wmaterial = new THREE.MeshLambertMaterial({ color:0xFFFFFF, wireframe:true, transparent:true, opacity: 0.03, side:THREE.DoubleSide/*, shading:THREE.FlatShading*/}); var cube = new THREE.Mesh(geometry, material); var wire = new THREE.Mesh(geometry, wmaterial); var floor = new THREE.Mesh(geometry, material); var wfloor = new THREE.Mesh(geometry, wmaterial); cube.add(wfloor); cube.castShadow = true; cube.receiveShadow = true; cube.rotationValue = 0.1+Math.abs(mathRandom(8)); floor.scale.y = 0.05;//+mathRandom(0.5); cube.scale.y = 0.1+Math.abs(mathRandom(8)); var cubeWidth = 0.9; cube.scale.x = cube.scale.z = cubeWidth+mathRandom(1-cubeWidth); cube.position.x = Math.round(mathRandom()); cube.position.z = Math.round(mathRandom()); floor.position.set(cube.position.x, 0/*floor.scale.y / 2*/, cube.position.z) town.add(floor); town.add(cube); }; var gmaterial = new THREE.MeshToonMaterial({color:0xFFFF00, side:THREE.DoubleSide}); var gparticular = new THREE.CircleGeometry(0.01, 3); var aparticular = 5; for (var h = 1; h<300; h++) { var particular = new THREE.Mesh(gparticular, gmaterial); particular.position.set(mathRandom(aparticular), mathRandom(aparticular),mathRandom(aparticular)); particular.rotation.set(mathRandom(),mathRandom(),mathRandom()); smoke.add(particular); }; var pmaterial = new THREE.MeshPhongMaterial({ color:0x000000, side:THREE.DoubleSide, roughness: 10, metalness: 0.6, opacity:0.9, transparent:true}); var pgeometry = new THREE.PlaneGeometry(60,60); var pelement = new THREE.Mesh(pgeometry, pmaterial); pelement.rotation.x = -90 * Math.PI / 180; pelement.position.y = -0.001; pelement.receiveShadow = true; //pelement.material.emi.........完整代码请登录后点击上方下载按钮下载查看
网友评论0