Threejs绘制一条圆弧线 | 您所在的位置:网站首页 › 一条弧线图片怎么画好看 › Threejs绘制一条圆弧线 |
直线、椭圆、圆弧、基类Curve
本文是Three.js电子书的7.2节 本节课通过介绍直线、圆弧线,以及这些曲线的基类Cure。 圆弧线ArcCurve圆弧线ArcCurve的基类是椭圆弧线EllipseCurve,关于圆弧线的使用方法可以查看threejs文档中的椭圆弧线。 ArcCurve( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) 参数含义aX, aY圆弧圆心坐标 |aRadius|圆弧半径| |aStartAngle, aEndAngle|起始角度| |aClockwise|是否顺时针绘制,默认值为false| //参数:0, 0圆弧坐标原点x,y 100:圆弧半径 0, 2 * Math.PI:圆弧起始角度 var arc = new THREE.ArcCurve(0, 0, 100, 0, 2 * Math.PI); 曲线Curve方法.getPoints().getPoints()是基类Curve的方法,圆弧线ArcCurve的基类是椭圆弧线EllipseCurve,椭圆弧线的基类是曲线Curve,所以圆弧线具有Curve的方法.getPoints()。 通过方法.getPoints()可以从圆弧线按照一定的细分精度返回沿着圆弧线分布的顶点坐标。细分数越高返回的顶点数量越多,自然轮廓越接近于圆形。方法.getPoints()的返回值是一个由二维向量Vector2或三维向量Vector3构成的数组,Vector2表示位于同一平面内的点,Vector3表示三维空间中一点。 var arc = new THREE.ArcCurve(0, 0, 100, 0, 2 * Math.PI); //getPoints是基类Curve的方法,返回一个vector2对象作为元素组成的数组 var points = arc.getPoints(50);//分段数50,返回51个顶点 几何体方法.setFromPoints().setFromPoints()是几何体Geometry的方法,通过该方法可以把数组points中顶点数据提取出来赋值给几何体的顶点位置属性geometry.vertices,数组points的元素是二维向量Vector2或三维向量Vector3。 BufferGeometry和Geometry一样具有方法.setFromPoints(),不过区别是提取顶点数据后赋值给geometry.attributes.position属性。 // setFromPoints方法从points中提取数据改变几何体的顶点属性vertices geometry.setFromPoints(points); console.log(geometry.vertices); // 如果几何体是BufferGeometry,setFromPoints方法改变的是.attributes.position属性 // console.log(geometry.attributes.position); 绘制圆弧线案例使用threejs的API圆弧线ArcCurve绘制一个圆弧轮廓。 var geometry = new THREE.Geometry(); //声明一个几何体对象Geometry //参数:0, 0圆弧坐标原点x,y 100:圆弧半径 0, 2 * Math.PI:圆弧起始角度 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); //线条对象添加到场景中和上面绘制圆弧线代码实现的功能相同,不过没有借助圆弧线THREE.ArcCurve,通过三角函数计算生成圆弧线上的顶点。设置这个案例的目的就是,你可以通过对比两个代码案例,明白Threejs一些曲线API本质上就是通过某种算法得到了沿着特定轨迹的顶点数据。 var geometry = new THREE.Geometry(); //声明一个几何体对象Geometry var R = 100; //圆弧半径 var N = 50; //分段数量 // 批量生成圆弧上的顶点数据 for (var i = 0; i color: 0x000000 }); //线条模型对象 var line = new THREE.Line(geometry, material); scene.add(line); //线条对象添加到场景中 绘制直线效果直接给几何体Geometry设置两个顶点数据。 var geometry = new THREE.Geometry(); //声明一个几何体对象Geometry var p1 = new THREE.Vector3(50, 0, 0); //顶点1坐标 var p2 = new THREE.Vector3(0, 70, 0); //顶点2坐标 //顶点坐标添加到geometry对象 geometry.vertices.push(p1, p2); var material = new THREE.LineBasicMaterial({ color: 0xffff00, });//材质对象 //线条模型对象 var line = new THREE.Line(geometry, material); scene.add(line); //线条对象添加到场景中通过LineCurve3绘制一条三维直线。 var geometry = new THREE.Geometry(); //声明一个几何体对象Geometry var p1 = new THREE.Vector3(50, 0, 0); //顶点1坐标 var p2 = new THREE.Vector3(0, 70, 0); //顶点2坐标 // 三维直线LineCurve3 var LineCurve = new THREE.LineCurve3(p1, p2); // 二维直线LineCurve var LineCurve = new THREE.LineCurve(new THREE.Vector2(50, 0), new THREE.Vector2(0, 70)); var pointArr = LineCurve.getPoints(10); geometry.setFromPoints(pointArr);通过LineCurve绘制一条二维直线。 var geometry = new THREE.Geometry(); //声明一个几何体对象Geometry var p1 = new THREE.Vector2(50, 0); //顶点1坐标 var p2 = new THREE.Vector2(0, 70); //顶点2坐标 // 二维直线LineCurve var LineCurve = new THREE.LineCurve(p1, p2); var pointArr = LineCurve.getPoints(10); geometry.setFromPoints(pointArr); |
CopyRight 2018-2019 实验室设备网 版权所有 |