自学内容网 自学内容网

threejs+html 实现仿3D地球旋转效果

html:

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>demo</title>
    <style>
        * {
            padding: 0;
            margin: 0;
            box-sizing: border-box;
        }

        #chart_map {
            position: fixed;
            top: 0;
            bottom: 0;
            left: 0;
            right: 0;
            /* border: 1px solid red; */
        }
    </style>
</head>

<body>
    <div id="chart_map"></div>

<!-- 引入Three.js库 -->
<script src="https://cdn.jsdelivr.net/npm/three@0.137/build/three.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/three@0.137/examples/js/controls/OrbitControls.js"></script>
<script src="https://cdn.jsdelivr.net/npm/three@0.137/examples/js/loaders/STLLoader.js"></script>
    <script>
        // 创建场景对象Scene
        var scene = new THREE.Scene();

        // 辅助坐标系  参数250表示坐标系大小,可以根据场景大小去设置
        // var axisHelper = new THREE.AxesHelper(250);
        // scene.add(axisHelper);

        // 相机设置
        const width = document.querySelector("#chart_map").offsetWidth;
        const height = document.querySelector("#chart_map").offsetHeight;
        var k = width / height; //窗口宽高比
        var s = 100; //三维场景显示范围控制系数,系数越大,显示的范围越大

        // 创建相机对象
        var camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 1000);
        camera.position.set(200, 100, 300); // 设置相机位置
        camera.lookAt(scene.position); // 设置相机方向(指向的场景对象)

        // 创建渲染器对象
        var renderer = new THREE.WebGLRenderer({ alpha: true }); // 启用透明 
        renderer.setSize(width, height); // 设置渲染区域尺寸
        document.querySelector("#chart_map").appendChild(renderer.domElement);

        // 初始化OrbitControls
        var controls = new THREE.OrbitControls(camera, renderer.domElement);
        controls.enableDamping = true; // 是否开启阻尼效果
        controls.dampingFactor = 0.05; // 阻尼(慢镜头)因子
        controls.screenSpacePanning = false; // 是否开启屏幕空间平移
        controls.rotateSpeed = 0.5; // 旋转速度
        controls.zoomSpeed = 0.5; // 缩放速度
        controls.minDistance = 100; // 最小距离
        controls.maxDistance = 500; // 最大距离
        controls.maxPolarAngle = Math.PI / 2; // 限制仰角

        // 加载纹理图片
        var textureLoader = new THREE.TextureLoader();
        var texture = textureLoader.load('http://t13.baidu.com/it/u=699432127,542290912&fm=224&app=112&f=JPEG?w=500&h=500');

        // 创建一个球体几何体
        var geometry = new THREE.SphereGeometry(50, 32, 32); // 半径为50,宽度分段数为32,高度分段数为32

        // 创建一个材质,并将纹理应用到材质上
        var material = new THREE.MeshBasicMaterial({ map: texture });

        // 将材质应用到球体几何体上,创建一个网格对象
        var sphere = new THREE.Mesh(geometry, material);

        // 将网格对象添加到场景中
        scene.add(sphere);

        // 渲染函数
        function render() {
            // 更新球体的旋转角度
            sphere.rotateY(0.01); // 每次调用时绕y轴旋转0.01弧度

            // 执行渲染操作
            renderer.render(scene, camera);

            // 更新控制器
            controls.update();

            // 请求下一帧动画
            requestAnimationFrame(render);
        }

        // 启动动画循环
        render();
    </script>
</body>

</html>


原文地址:https://blog.csdn.net/qq_43770056/article/details/145160939

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!