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