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