Three实现旋转地球效果的例子

本文根据 https://blog.csdn.net/m0_51180924/article/details/144498003 编写,实现了旋转地球的效果。

代码如下,如果想测试需要本地补充three.js,jquery.js和CCapture.all.min.js,在【参考1】文章末尾可以下载到(示例代码保存为 html 放入带有 JS文件的目录即可)

<html>

<head>
    <meta charset="UTF-8">
    <!-- <script src="http://threejs.org/build/three.js"></script>-->
    <!-- <script src="http://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>-->
    <script src="ThreeJS/three.js"></script>
    <script src="ThreeJS/jquery.js"></script>
    <script src="CCapture/CCapture.all.min.js"></script>
</head>

<body>
    <center id="myContainer"></center>
    <script>
        //创建渲染器
        var myRenderer = new THREE.WebGLRenderer({
            antialias: false,
            preserveDrawingBuffer: true
        });
        document.body.appendChild(myRenderer.domElement);
        myRenderer.setPixelRatio(window.devicePixelRatio);
        myRenderer.setSize(window.innerWidth, window.innerHeight);
        $("#myContainer").append(myRenderer.domElement);
        var myClock = new THREE.Clock();
        var myCamera = new THREE.PerspectiveCamera(60,
            window.innerWidth / window.innerHeight, 1, 10000);
        myCamera.position.set(0, 100, 300);
        myCamera.lookAt(new THREE.Vector3(0, 0, 0))
        var myScene = new THREE.Scene();

        myScene.background = new THREE.Color('white');
        myScene.add(new THREE.AmbientLight(0xFFFFFF, 1.0));

        //创建球体(地球)
        var myGeometry = new THREE.SphereBufferGeometry(120, 64, 64);
        var myMap = new THREE.TextureLoader().load('image/img007.png');
        var myMaterial = new THREE.MeshPhongMaterial({
            map: myMap
        });
        var myMesh = new THREE.Mesh(myGeometry, myMaterial);
        myScene.add(myMesh);
        let isAnimating = true; // 动画状态标志

        // 初始化捕获器(以 WebM 格式为例)
        const capturer = new CCapture({
            format: 'webm',
            framerate: 30,
            verbose: true
        });

        // 开始捕获
        capturer.start();

        //渲染(旋转)球体(地球)
        animate();


        function animate() {
            if (!isAnimating) return; // 停止动画时退出循环
            requestAnimationFrame(animate);
            var delta = myClock.getDelta();
            myRenderer.render(myScene, myCamera);
            //按照设置的角度增量实现绕y轴旋转地球
            myMesh.rotation.y += delta / 5;

            // 捕获当前帧
            capturer.capture(myRenderer.domElement);

            // 旋转超过一圈(2π)时停止
            if (myMesh.rotation.y >= Math.PI * 2) {
                isAnimating = false; // 停止动画
                console.log("旋转完成!");
                capturer.stop();
                capturer.save();
            }
        }
    </script>
</body>

</html>

最终完整的代码下载:

工作的视频

参考:

1.https://www.lab-z.com/cthc/

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注