three实现三维变色龙变色和苍蝇飞行动画效果代码

代码语言:html

所属分类:三维

代码描述:three实现三维变色龙变色和苍蝇飞行动画效果代码

代码标签: three 变色龙 苍蝇 三维

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

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

<head>

    <meta charset="UTF-8">



    <style>
        body {
          margin: 0;
        }
        #world {
          position: absolute;
          overflow: hidden;
          width: 100%;
          height: 100%;
        }
    </style>



</head>

<body>
    <div id='world'></div>

    <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/three.84.js"></script>
    <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/OrbitControls.min.js"></script>
    <script>
        'use strict';
        
        let scene,
        camera,
        renderer,
        raycaster,
        controls,
        mouse;
        
        let chameleon,
        branch,
        fly;
        
        let width,
        height;
        
        function init() {
          width = window.innerWidth,
          height = window.innerHeight;
        
          scene = new THREE.Scene();
          camera = new THREE.PerspectiveCamera(75, width / height, 0.1, 1000);
          camera.position.set(30, 0, 10);
          camera.lookAt(scene.position);
        
          renderer = new THREE.WebGLRenderer();
          renderer.setPixelRatio(window.devicePixelRatio);
          renderer.setSize(width, height);
          renderer.setClearColor(0xF2A9B4);
          renderer.shadowMap.enabled = true;
          renderer.shadowMap.type = THREE.PCFSoftShadowMap;
        
          // controls = new THREE.OrbitControls(camera, renderer.domElement);
        
          raycaster = new THREE.Raycaster();
          mouse = new THREE.Vector2();
        
          addLights();
          drawChameleon();
          drawBranch();
          drawFly();
        
          document.getElementById('world').appendChild(renderer.domElement);
        
          document.addEventListener('mousemove', onMouseMove);
          document.addEventListener('touchmove', onTouchMove);
          window.addEventListener('resize', onResize, false);
        }
        
        function addLights() {
          const light = new THREE.HemisphereLight(0xffffff, 0xffffff, 0.6);
          scene.add(light);
        
          const directLight1 = new THREE.DirectionalLight();
          directLight1.castShadow = true;
          directLight1.position.set(20, 13, 12);
          scene.add(directLight1);
        
          const directLight2 = new THREE.DirectionalLight({
            color: 0xd9fbfc,
            intensity: 0.6 });
        
          directLight2.castShadow = true;
          directLight2.position.set(-27, 18, 6);
          scene.add(directLight2);
        }
        
        function drawChameleon() {
          chameleon = new Chameleon();
          scene.add(chameleon.group);
        }
        
        function drawBranch() {
          branch = drawCylinder(0x17B26F, 0.76, 1.12, 2.14, 5);
          branch.position.set(-2.76, -5.67, -7.86);
          branch.rotation.set(rad(85.18), rad(4.14), rad(-20.4));
          branch.scale.set(3.78, 11.92, 2.72);
          branch.castShadow = true;
          branch.receiveShadow = true;
          scene.add(branch);
        }
        
        function drawFly() {
          fly = new Fly();
          scene.add(fly.group);
        }
        
        function onResize() {
          width = window.innerWidth;
          height = window.innerHeight;
          camera.aspect = width / height;
          camera.updateProjectionMatrix();
          renderer.setSize(width, height);
        }
        
        function onMouseMove(event) {
          mouse.x = event.clientX / width * 2 - 1;
          mouse.y = -(event.clientY / height) * 2 + 1;
        }
        
        function onTouchMove(event) {
          event.preventDefault();
          mouse.x = event.touches[0].pageX / width * 2 - 1;
          mouse.y = -(event.touches[0].pageY / height) * 2 + 1;
        }
        
        function rad(degrees) {
          return degrees * (Math.PI / 180);
        }
        
        function drawCylinder(materialColor, rTop, rBottom, height, radialSeg) {
          const geometry = new THREE.CylinderGeometry(rTop, rBottom, height, radialSeg);
          const material = new THREE.MeshStandardMaterial({
            color: materialColor,
            roughness: 1,
            shading: THREE.FlatShading });
        
          const mesh = new THREE.Mesh(geometry, material);
          return mesh;
        }
        
        function animate() {
     .........完整代码请登录后点击上方下载按钮下载查看

网友评论0