three打造一个三维电影胶卷滚动动画效果代码

代码语言:html

所属分类:三维

代码描述:three打造一个三维电影胶卷滚动动画效果代码

代码标签: 三维 电影 胶卷 滚动 动画 效果

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

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

<head>

  <meta charset="UTF-8">

  
  
  
<style>
body { 
    margin: 0; 
    overflow:hidden
}
</style>



</head>

<body translate="no" >
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/three.121.js"></script>
  
  
      <script>
const infinite = false;
const waveLength = 1.1;
const slideCount = 8;
const precision = 25;
const raduis = 0.7;
const filmWidth = 0.3;
const filmColor = '#876';
const three = configureThree();
const customDepthMaterial = createDepthMaterial();

const uniforms = {
  rotation: { value: 0 } };


const film = new THREE.Object3D();
three.scene.add(film);

for (let i = 0; i < slideCount * 3; i++)
addSlide(i, `//repo.bfw.wiki/bfwrepo/image/5d65ea7d8bc8b.png?x-oss-process=image/auto-orient,1/resize,m_fill,w_200,h_200,/quality,q_90`);

let rotation = 1.2;

requestAnimationFrame(function render(t) {
  moveFilm(t);
  three.render();
  requestAnimationFrame(render);
});

// constols

let touchStartY;
let rotationAtStart;

addEventListener('touchstart', e => {
  touchStartY = e.touches[0].clientY;
  rotationAtStart = rotation;
});

addEventListener('touchmove', e => {
  rotation = rotationAtStart + (e.touches[0].clientY - touchStartY) / 50;
});

addEventListener('wheel', e => {
  rotation -= e.deltaY / 400;
});

//

function configureThree() {

  const renderer = new THREE.WebGLRenderer({ antialias: true });
  renderer.shadowMap.enabled = true;
  renderer.shadowMap.type = THREE.PCFSoftShadowMap;
  renderer.localClippingEnabled = true;
  document.body.appendChild(renderer.domElement);

  const scene = new THREE.Scene();
  scene.add(new THREE.AmbientLight('white', 0.3));
  scene.add(createDirectionalLight());

  const camera = new THREE.OrthographicCamera();
  camera.position.set(0, 0, 1.5);
  camera.lookAt(scene.position);

  return { scene, render };

  function render() {
    if (renderer.width !== innerWidth ||
    renderer.height !== innerHeight) {

      renderer.setSize(innerWidth, innerHeight);
      camera.left = -innerWidth / innerHeight;
      camera.right = -camera.left;
      camera.updateProjectionMatrix();
    }

    renderer.render(scene, camera);
  }
}

function createDirectionalLight() {
  const dirLight = new THREE.Di.........完整代码请登录后点击上方下载按钮下载查看

网友评论0