Threejs绘制圆形的源码,可以鼠标滚轮放大缩小

直接复制到html格式即可打开查看效果

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

<head>
    <meta charset="UTF-8">
    <title>绘制曲线</title>
    <style>
        body {
            margin: 0;
            overflow: hidden;
            /* 隐藏body窗口区域滚动条 */
        }
    </style>
    <!--引入three.js三维引擎-->
    <script src="http://www.yanhuangxueyuan.com/versions/threejsR92/build/three.js"></script>
    <script src="http://www.yanhuangxueyuan.com/threejs/examples/js/controls/OrbitControls.js"></script>
    <!-- <script src="./three.js"></script> -->
    <!-- <script src="http://www.yanhuangxueyuan.com/threejs/build/three.js"></script> -->
</head>

<body>
    <script>
        var scene = new THREE.Scene();

        var geometry = new THREE.Geometry(); //声明一个几何体对象Geometry

        //绘制圆形
        var arc = new THREE.ArcCurve(0, 0, 100, 0, 2 * Math.PI);
        //getPoints是基类Curve的方法,返回一个vector2对象作为元素组成的数组
        var points = arc.getPoints(50);//分段数50,返回51个顶点
        // setFromPoints方法从points中提取数据改变几何体的顶点属性vertices
        geometry.setFromPoints(points);
        //材质对象
        var material = new THREE.LineBasicMaterial({
            color: 0x000000
        });
        //线条模型对象
        var line = new THREE.Line(geometry, material);
        scene.add(line); //线条对象添加到场景中

        var material = new THREE.LineBasicMaterial({
            color: 0x0000ff,
        });
        //线条模型对象
        var line = new THREE.Line(geometry, material);
        scene.add(line); //线条对象添加到场景中

        // var geometry = new THREE.Geometry(); //声明一个几何体对象Geometry
        // // // 三维样条曲线  Catmull-Rom算法
        // // var curve = new THREE.CatmullRomCurve3([
        // //     new THREE.Vector3(-50, 20, 90),
        // //     new THREE.Vector3(-10, 40, 40),
        // //     new THREE.Vector3(0, 0, 0),
        // //     new THREE.Vector3(60, -60, 0),
        // //     new THREE.Vector3(70, 0, 80)
        // // ]);

        // var p1 = new THREE.Vector3(-80, 0, 0);
        // var p2 = new THREE.Vector3(-40, 100, 0);
        // var p3 = new THREE.Vector3(40, 100, 0);
        // var p4 = new THREE.Vector3(80, 0, 0);
        // // 三维三次贝赛尔曲线
        // var curve = new THREE.CubicBezierCurve3(p1, p2, p3, p4);
        // //getPoints是基类Curve的方法,返回一个vector3对象作为元素组成的数组
        // var points = curve.getPoints(100); //分段数100,返回101个顶点
        // // setFromPoints方法从points中提取数据改变几何体的顶点属性vertices
        // geometry.setFromPoints(points);
        // //材质对象
        // var material = new THREE.LineBasicMaterial({
        //     color: 0x000000
        // });
        // //线条模型对象
        // var line = new THREE.Line(geometry, material);
        // scene.add(line); //线条对象添加到场景中


        /**
         * 相机设置
         */
        var width = window.innerWidth; //窗口宽度
        var height = window.innerHeight; //窗口高度
        var k = width / height; //窗口宽高比
        var s = 200; //三维场景显示范围控制系数,系数越大,显示的范围越大
        //创建相机对象
        // var camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 1000);
        // camera.position.set(100, 100, 100); //设置相机位置
        // camera.lookAt(scene.position); //设置相机方向(指向的场景对象)

        var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 1000);
        camera.position.set(0, 0, 1000);
        camera.lookAt(0, 0, 0)
        /**
         * 创建渲染器对象
         */
        var renderer = new THREE.WebGLRenderer();
        renderer.setSize(width, height);//设置渲染区域尺寸
        renderer.setClearColor(0xb9d3ff, 1); //设置背景颜色
        document.body.appendChild(renderer.domElement); //body元素中插入canvas对象
        //执行渲染操作   指定场景、相机作为参数
        renderer.render(scene, camera);
        // 渲染函数
        let T0 = new Date();//上次时间
        function render() {
            let T1 = new Date();//本次时间
            let t = T1 - T0;//时间差
            T0 = T1;//把本次时间赋值给上次时间
            renderer.render(scene, camera);//执行渲染操作
            // mesh.rotateY(0.001 * t);//每次绕y轴旋转0.01弧度
            requestAnimationFrame(render);//请求再次执行渲染函数render
        }
        render();
        var controls = new THREE.OrbitControls(camera, renderer.domElement);//创建控件对象
    </script>
</body>

</html>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容