regl+gl-matrix实现webgl隧道穿越动画效果代码

代码语言:html

所属分类:动画

代码描述:regl+gl-matrix实现webgl隧道穿越动画效果代码

代码标签: regl gl-matrix webgl 隧道 穿越 动画

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en" >

<head>
 
<meta charset="UTF-8">
 

 
 
<style>
#display {
 
position: absolute;
 
inset: 0;
}

.input {
 
position: absolute;
 
left: 0;
 
top: 0;
}
</style>



 
 
</head>

<body translate="no">

 

 
   
<div id="display"></div>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/regl.2.1.0.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/gl-matrix-3.4.2.js"></script>
     
<script  >
const regl = createREGL({
  container: document.querySelector("#display"),
  pixelRatio: Math.min(2, globalThis.devicePixelRatio),
  extensions: ["ANGLE_instanced_arrays"]
});
const { mat4 } = glMatrix;

const c = document.querySelector("#display");
const mouse = { x: c.offsetWidth / 2, y: c.offsetHeight / 2 };

window.addEventListener("mousemove", (e) => {
  mouse.x = e.clientX;
  mouse.y = e.clientY;
});

const depth = 12
const step = 1;
const length = Math.floor(depth / step);
const tubeOffsets = [];
const tubeVfxOffsets = [];
const tubeIndexes = [];

for (let i = 0; i < length; i++) {
  tubeOffsets.push([Math.sin(i) * 0.2, 0, step * i - 10]);
  tubeIndexes.push([i]);
}

const offsetBuffer = regl.buffer(tubeOffsets);

const drawPlane = regl({
  vert: `
      precision mediump float;
     
      attribute vec2 position;
      attribute vec3 offset; // Смещение инстансов
      attribute float instanceId; // instanceId
     
      uniform mat4 projection, view, model;
      uniform float time;
     
      varying vec2 uv;
      varying float vInstanceId;
      varying vec4 vWorldPosition;
 
      void main() {
        vec3 pos = vec3(position, 0.0) + offset;
        uv = 0.5 * (position + 1.0);
  .........完整代码请登录后点击上方下载按钮下载查看

网友评论0