three实现三维跟随鼠标多足蜘蛛爬行动画交互效果代码

代码语言:html

所属分类:三维

代码描述:three实现三维跟随鼠标多足蜘蛛爬行动画交互效果代码

代码标签: three 三维 跟随 鼠标 多足 蜘蛛 爬行 动画 交互

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

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

<head>
  <meta charset="UTF-8">
  <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/simplex-noise.min.js"></script>
<script type="importmap">
  {
    "imports": {
      "three": "//repo.bfw.wiki/bfwrepo/js/module/three/build/164/three.module.js"
     
    }
  }
</script>
</head>
<body style="margin: 0;overflow: hidden">
<script type="module">

    import {
        Scene, WebGLRenderer, PerspectiveCamera, GridHelper, Vector2, InstancedMesh,
        Mesh, MeshNormalMaterial, SphereGeometry, PlaneGeometry, DirectionalLight, CameraHelper,
        Vector3, Raycaster, Object3D, DynamicDrawUsage, MeshStandardMaterial, PCFSoftShadowMap
    } from "three";



    let noise = new SimplexNoise()

    const sphereGeometry = new SphereGeometry(1, 16, 16)


    const scene = new Scene();
    const light = new DirectionalLight();
    light.position.set(1, 10, 10);
    light.castShadow = true;
    light.shadow.mapSize.width = 2048; // default
    light.shadow.mapSize.height = 2048; // default
    light.shadow.camera.near = 0.5; // default
    light.shadow.camera.far = 500; // default
    scene.add(light)
    // scene.add(new CameraHelper(light.shadow.camera));

    // scene.add(new GridHelper())

    let sz = 55;
    const planeGeometry = new PlaneGeometry(sz, sz, 333, 333)
    for (let i = 0; i < planeGeometry.attributes.position.array.length; i+=3) {
        let x = planeGeometry.attributes.position.array[i+0]
        let z = planeGeometry.attributes.position.array[i+1]
        planeGeometry.attributes.position.array[i+2] -= noise.noise2D(x,z)/10
        // debugger
    }

    for (let i = 0; i < planeGeometry.attributes.normal.array.length; i++)
        planeGeometry.attributes.normal.array[i] += Math.random()*0.4
    planeGeometry.verticesNeedUpdate = true;

    const planeMaterial = new MeshStandardMaterial({color: 0xf0f0f0});
    const plane = new Mesh(planeGeometry, planeMaterial);
    plane.receiveShadow = true
    plane.rotation.x = -Math.PI / 2;
    scene.add(plane)

    const agentMaterial = new MeshStandardMaterial({color: 0xf0f0e0});
    const agent = new Mesh(sphereGeometry, agentMaterial);
    agent.scale.multiplyScalar(0.1);
    agent.position.set(0, 1, 0)
    scene.add(agent)

    const o = new Object3D();

    for (let i = 0; i < 100; i++) {
        const mesh = new Mesh(sphereGeometry, agentMaterial);
        const gap = 0.2;
        const rnd = 1 - gap * 2;
        mesh.scale.multiplyScalar(0.1);
        let x = i % 10 - 5 + Math.random() * rnd + gap;
        let z = M.........完整代码请登录后点击上方下载按钮下载查看

网友评论0