three打造一个游动的三维鱼和漫天灯笼效果代码
代码语言:html
所属分类:三维
代码描述:three打造一个游动的三维鱼效果代码,新年年年有余
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <style> body { overflow: hidden; margin: 0; } </style> </head> <body> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/three.115.js"></script> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/BufferGeometryUtils.js"></script> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/OrbitControls.min.js"></script> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/STLLoader.js"></script> <script > var scene = new THREE.Scene(); var camera = new THREE.PerspectiveCamera(60, innerWidth / innerHeight, 0.1, 500); camera.position.set(0, -25, 80); var renderer = new THREE.WebGLRenderer({antialias: true}); renderer.setClearColor(0x181005); renderer.setSize(innerWidth, innerHeight); document.body.appendChild(renderer.domElement); var controls = new THREE.OrbitControls(camera, renderer.domElement); controls.maxDistance = 150; // lanterns let geoms = []; let pts = [ new THREE.Vector2(0, 1. - 0), new THREE.Vector2(0.25, 1. - 0), new THREE.Vector2(0.25, 1. - 0.125), new THREE.Vector2(0.45, 1. - 0.125), new THREE.Vector2(0.45, 1. - 0.95) ]; var geom = new THREE.LatheBufferGeometry(pts, 20); geoms.push(geom); var geomLight = new THREE.CylinderBufferGeometry(0.1, 0.1, 0.05, 20); //geomLight.rotateX(Math.PI * 0.5); geoms.push(geomLight); var fullGeom = THREE.BufferGeometryUtils.mergeBufferGeometries(geoms); var instGeom = new THREE.InstancedBufferGeometry().copy(fullGeom); var num = 500; let instPos = []; //3 let instSpeed = []; //1 let instLight = []; // 2 (initial intensity, frequency) for (let i = 0; i < num; i++){ instPos.push( Math.random() - 0.5, Math.random() - 0.5, Math.random() - 0.5 ); instSpeed.push( Math.random() * 0.25 + 1); instLight.push( Math.PI + (Math.PI * Math.random()), Math.random() + 5); } instGeom.setAttribute("instPos", new THREE.InstancedBufferAttribute(new Float32Array(instPos), 3)); instGeom.setAttribute("instSpeed", new THREE.InstancedBufferAttribute(new Float32Array(instSpeed), 1)); instGeom.setAttribute("instLight", new THREE.InstancedBufferAttribute(new Float32Array(instPos), 2)); var mat = new THREE.ShaderMaterial({ uniforms: { uTime: {value: 0}, uLight: {value: new THREE.Color("red").multiplyScalar(1.5)}, uColor: {value: new THREE.Color("maroon").multiplyScalar(1)}, uFire: {value: new THREE.Color(1, 0.75, 0)} }, vertexShader:` uniform float uTime; attribute vec3 instPos; attribute float instSpeed; attribute vec2 instLight; varying vec2 vInstLight; varying float vY; void main() { vInstLight = instLight; vY .........完整代码请登录后点击上方下载按钮下载查看
网友评论0