three.js从入门到精通系列教程045 - 在平面上创建来回跳动的球体

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>three.js从入门到精通系列教程045 - 在平面上创建来回跳动的球体</title>
    <script src="ThreeJS/three.js"></script>
    <script src="ThreeJS/jquery.js"></script>
</head>

<body>
    <center id="myContainer"></center>
    <script>
        //创建渲染器
        var myRenderer = new THREE.WebGLRenderer({ antialias: true });
        myRenderer.setSize(window.innerWidth, window.innerHeight);
        myRenderer.setClearColor('white', 1.0);
        myRenderer.shadowMapEnabled = true;
        $("#myContainer").append(myRenderer.domElement);
        var myScene = new THREE.Scene();
        var myCamera = new THREE.PerspectiveCamera(45,
            window.innerWidth / window.innerHeight, 0.1, 1000);
        myCamera.position.set(64.7, 15.1, 17.8);
        myCamera.lookAt(myScene.position);
        var mySpotLight = new THREE.SpotLight(0xffffff);
        mySpotLight.position.set(-40, 40, -15);
        mySpotLight.castShadow = true;
        mySpotLight.shadow.mapSize = new THREE.Vector2(1024, 1024);
        mySpotLight.shadow.camera.far = 130;
        mySpotLight.shadow.camera.near = 40;
        myScene.add(mySpotLight);
        myScene.add(new THREE.AmbientLight(0x353535));
        //在场景中绘制XYZ坐标轴的轴线(红线是X轴,绿线是Y轴,蓝线是Z轴)
        myScene.add(new THREE.AxesHelper(120));
        //在场景中绘制网格线
        myScene.add(new THREE.GridHelper(100, 30, 0x2C2C2C, 0x888888));
        //创建平面
        var myPlaneGeometry = new THREE.PlaneGeometry(60, 100, 1, 1);
        var myPlaneMaterial = new THREE.MeshLambertMaterial({ color: 0xffffff });
        var myPlaneMesh = new THREE.Mesh(myPlaneGeometry, myPlaneMaterial);
        myPlaneMesh.rotation.x = -0.5 * Math.PI;
        myPlaneMesh.position.x = 26;
        myPlaneMesh.position.y = 0;
        myPlaneMesh.position.z = 0;
        myPlaneMesh.receiveShadow = true;
        myScene.add(myPlaneMesh);
        //创建球体
        var mySphereGeometry = new THREE.SphereGeometry(4, 20, 20);
        var mySphereMaterial = new THREE.MeshLambertMaterial({ color: 'red' });
        var mySphereMesh = new THREE.Mesh(mySphereGeometry, mySphereMaterial);
        mySphereMesh.position.x = 20;
        mySphereMesh.position.y = 4;
        mySphereMesh.position.z = 2;
        mySphereMesh.castShadow = true;
        myScene.add(mySphereMesh);
        //渲染球体在平面上的弹跳动画
        animate();
        var step = 0;
        function animate() {
            step += 0.05;
            mySphereMesh.position.x = 20 + (10 * Math.cos(step));
            mySphereMesh.position.y = 2 + (10 * Math.abs(Math.sin(step)));
            requestAnimationFrame(animate);
            myRenderer.render(myScene, myCamera);
        }
    </script>
</body>

</html>