three.js 源码注释(九十三)extras/core/Path.js_three.path.js-程序员宅基地

技术标签: 三维  gles  THREE.JS源码注释  webgl  web3d  javascript  数据可视化  three.js  

商域无疆 (http://blog.csdn.net/omni360/)

本文遵循“署名-非商业用途-保持一致”创作公用协议

转载请保留此句:商域无疆 -  本博客专注于 敏捷开发及移动和物联设备研究:数据可视化、GOLANG、Html5、WEBGL、THREE.JS否则,出自本博客的文章拒绝转载或再转载,谢谢合作。


俺也是刚开始学,好多地儿肯定不对还请见谅.

以下代码是THREE.JS 源码文件中extras/core/Path.js文件的注释.

更多更新在 : https://github.com/omni360/three.js.sourcecode


/**
 * @author zz85 / http://www.lab4games.net/zz85/blog
 * Creates free form 2d path using series of points, lines or curves.
 * 使用系列点创建自由形式的二维路径,直线或曲线。
 *
 **/
/*
///Path类创建2d的路径,包括点,线,和立方体,类似于HTML5 2D画布的API,curvePath类的扩展.
*/
///<summary>Curve</summary>
///<param name ="points" type="Vector2Array">2维向量数组</param>
THREE.Path = function ( points ) {

	THREE.CurvePath.call(this);	//调用CurvePath对象的call方法,将原本属于CurvePath的方法交给当前对象Path来使用.

	this.actions = [];	//可用的动作数组.

	if ( points ) {		//如果有参数points

		this.fromPoints( points );	//调用fromPoints方法创建路径.

	}

};
/*************************************************
****下面是Path对象的方法属性定义,继承自CurvePath对象.
**************************************************/
THREE.Path.prototype = Object.create( THREE.CurvePath.prototype );

THREE.PathActions = {

	MOVE_TO: 'moveTo',		//把路径移动到画布中的指定点,不创建线条
	LINE_TO: 'lineTo',		//添加一个新点,然后在画布中创建从该点到最后指定点的线条
	QUADRATIC_CURVE_TO: 'quadraticCurveTo', // Bezier quadratic curve //创建二次贝塞尔曲线
	BEZIER_CURVE_TO: 'bezierCurveTo', 		// Bezier cubic curve 	  //创建三次贝塞尔曲线
	CSPLINE_THRU: 'splineThru',				// Catmull-rom spline  	  //样条曲线通过
	ARC: 'arc',								// Circle				  //创建弧/曲线(用于创建圆形或部分圆)
	ELLIPSE: 'ellipse'												  //创建椭圆.
};

// TODO Clean up PATH API
/*
///fromPoints方法通过连接二维向量数组(参数vectors)内所有的顶点,创建路径.
*/
///<summary>fromPoints</summary>
///<param name ="vectors" type="Vector2Array">包含顶点信息的二维向量数组</param>
// Create path using straight lines to connect all points
// 连接所有的点,创建路径.
// - vectors: array of Vector2
// - vectors:2位向量数组.
THREE.Path.prototype.fromPoints = function ( vectors ) {

	this.moveTo( vectors[ 0 ].x, vectors[ 0 ].y );	//将光标移到vectors数组中第一个顶点的位置.

	for ( var v = 1, vlen = vectors.length; v < vlen; v ++ ) {	//遍历二维数组

		this.lineTo( vectors[ v ].x, vectors[ v ].y );	//调用lineTo方法,连接所有的顶点.

	};

};

// startPath() endPath()?
/*
///moveTo方法把路径移动到画布中的指定点,不创建线条,把moveTo动作和坐标压入actions数组.
*/
///<summary>moveTo</summary>
///<param name ="x" type="float">x坐标</param>
///<param name ="y" type="float">y坐标</param>
THREE.Path.prototype.moveTo = function ( x, y ) {

	var args = Array.prototype.slice.call( arguments );
	this.actions.push( { action: THREE.PathActions.MOVE_TO, args: args } );		//把moveTo动作和坐标压入actions数组

};
/*
///lineTo方法添加一个新点,然后在画布中创建从该点到最后指定点的线条,把lineTo动作和坐标压入actions数组.
*/
///<summary>moveTo</summary>
///<param name ="x" type="float">结束点x坐标</param>
///<param name ="y" type="float">结束点y坐标</param>
THREE.Path.prototype.lineTo = function ( x, y ) {

	var args = Array.prototype.slice.call( arguments );

	var lastargs = this.actions[ this.actions.length - 1 ].args;

	var x0 = lastargs[ lastargs.length - 2 ];	//通过计算获得起始点x坐标
	var y0 = lastargs[ lastargs.length - 1 ];	//通过计算获得起始点y坐标

	var curve = new THREE.LineCurve( new THREE.Vector2( x0, y0 ), new THREE.Vector2( x, y ) );	//创建可用的2d线段对象
	this.curves.push( curve );	//将曲线压入曲线对象数组

	this.actions.push( { action: THREE.PathActions.LINE_TO, args: args } );	//把lineTo动作和坐标压入actions数组

};
/*
///quadraticCurveTo方法创建二次贝塞尔曲线,把quadraticCurveTo动作和坐标压入actions数组.
*/
///<summary>quadraticCurveTo</summary>
///<param name ="aCPx" type="float">中间点x坐标</param>
///<param name ="aCPy" type="float">中间点y坐标</param>
///<param name ="aX" type="float">结束点x坐标</param>
///<param name ="aY" type="float">结束点y坐标</param>
THREE.Path.prototype.quadraticCurveTo = function( aCPx, aCPy, aX, aY ) {

	var args = Array.prototype.slice.call( arguments );

	var lastargs = this.actions[ this.actions.length - 1 ].args;

	var x0 = lastargs[ lastargs.length - 2 ];	//通过计算获得起始点x坐标
	var y0 = lastargs[ lastargs.length - 1 ];	//通过计算获
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/omni360/article/details/43374295

智能推荐

I.MX6 Android 平台CAN总线调试(包含测试C语言代码)_imx6 can-程序员宅基地

文章浏览阅读5.6k次,点赞4次,收藏30次。 I.MX6 Android 平台CAN总线调试(包含测试C语言代码) 前言:这几天需要调试NXP Android平台CAN总线,以前到工作中都没有接触过can总线,折腾了几天,终于通信成功。至于can总线的原理我就不细说了,网上很多,原理很复杂,也比较难懂,我们主要还是学习如何使用就可以了。这里就记录以下在android平台下如何使用can进行通信。一、外围电路CAN总..._imx6 can

青藏高原MODIS逐日无云积雪面积数据集-程序员宅基地

文章浏览阅读732次,点赞24次,收藏15次。在充分考虑青藏高原的地形和山地积雪特征的情况下,本套数据集采用了多种去云过程和步骤相结合,逐步实现保持积雪分类精度的情况下,完成逐日积雪的云量消除,形成了“青藏高原MODIS逐日无云积雪面积”的逐步综合分类算法,完成了“青藏高原MODIS逐日无云积雪面积数据集(2002~2018年)”。结果表明,在高原地区,当积雪深度>3 cm时,无云积雪产品总分类精度达到96.6%,积雪分类精度达89.0%,整个算法流程对MODIS积雪产品去云的精度损失较低,数据可靠性较高。(a)C6.1版MODIS无云积雪结果;

本地CMD命令将webp格式文件批量转换为图片格式(jpg、png、bmp、gif)_cmd命令转换文件格式-程序员宅基地

文章浏览阅读504次。其中,[input_image.webp]是您要转换的输入图像文件的路径和文件名,[output_image.png]是输出文件的路径和文件名。这将在当前目录下生成名为output.png的图像文件。_cmd命令转换文件格式

使用 QGIS 设置GeoServer栅格图层样式_geoserver 图层字体大小更改-程序员宅基地

文章浏览阅读907次,点赞15次,收藏28次。地理空间数据没有内在的可视化功能,必须对其进行样式设置才能在地图上直观地表示。默认情况下,GeoServer 使用称为样式层描述符 (SLD) 的标记语言来定义显示数据的样式规则。SLD 是一种基于 XML 的语言,允许用户和软件控制地理空间数据的视觉描绘。这种语言确保客户端和服务器都可以理解如何直观地呈现数据。添加样式要添加新样式,请导航至数据 > 样式页面,然后单击添加新样式链接。您将被重定向到新的样式页面,该页面与“样式编辑器数据”选项卡相同。_geoserver 图层字体大小更改

Xcode 下载真机包调试_xcode中i真机调试包下载地址-程序员宅基地

文章浏览阅读3.9k次。解决在低版本的Xcode上使用高版本iOS系统手机进行真机测试Xcode 真机包资源下载地址:真机包资源下载地址下载好以后解压,复制到以下路径:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport重启Xcode后就可以用Xcode真机调试了..._xcode中i真机调试包下载地址

2021 ICPC Southeastern Europe Regional Contest Werewolves(树上背包)-程序员宅基地

文章浏览阅读808次。2021 ICPC Southeastern Europe Regional Contest Werewolves(树上背包)链接题意:给出一个n个节点的树(n≤3000n\le3000n≤3000),每个点有自己的颜色,好子树的定义是,子树内有一半以上的节点是同一种颜色,问有多少种划分子树的方法,最后对998244353998244353998244353取模。思路:dls讲的树上背包。。当时听了也没太明白代码怎么写,现在想想还是对树上背包这种不太熟。我们对于每个颜色,都要在树上进行一次dp,这样就_2021 icpc southeastern europe regional contest

随便推点

什么是微服务架构_微服务架构简单说-程序员宅基地

文章浏览阅读192次。微服务介绍1.1 系统架构演变1.1.1 单体应用架构1.1.2 垂直应用架构1.1.3 分布式架构1.1.4 SOA架构1.1.5 微服务架构1.2 微服务架构介绍1.2.1 微服务架构的常见问题1.2.2 微服务架构的常见概念1.2.2.1 服务治理1.2.2.2 服务调用1.2.2.3 服务网关1.2.2.4 服务容错1.2.2.5 链路追踪1.2.3 微服务架构的常见解决方案1.2.3.1 ServiceComb1.2.3.2 SpringCloud1.2.3.3 SpringCloud Aliba_微服务架构简单说

Visual Studio Code怎么停止正在运行的Python脚本?_vscode 停止python运行-程序员宅基地

文章浏览阅读7.9k次,点赞6次,收藏7次。在VS Code中停止运行中的Python。_vscode 停止python运行

分享几款比较常用的代码比较工具-程序员宅基地

文章浏览阅读4.2k次,点赞2次,收藏2次。公众号关注“大鱼机器人”设为 “星标”,重磅干货,第一时间送达!素材来源:网络作者:yueliang2100整理:strongerHuang俗话说:三句不离本行,对于程序员这个可爱的群..._代码在线比较

BEVDet笔记_bevdet检测头-程序员宅基地

文章浏览阅读322次,点赞3次,收藏4次。BEV空间中不同类别的空间分布与图像视图的空间分布是完全不同的,图像视图相机的透视成像机制导致不同类别共享相似的空间分布,因此经典的NMS是对不同的类别采用相同的阈值,比如在2D目标检测中,两个实例的bounding box IoU是低于0.5的(这句话存疑),在BEV空间中,所有实例间的重叠接近于0,预测结果中IoU分布也因类别而异,在BEV空间中有些目标例如行人占比很小,冗余的框可能和GT间并没有交集,那就是IoU等于0,这就导致正样本和负样本空间关系如果依赖IoU的NMS其实是失效的。_bevdet检测头

使用ArcGIS统计栅格数据面积_arcgis重分类后计算面积-程序员宅基地

文章浏览阅读5w次,点赞20次,收藏194次。很多的时候我们都会遇到统计面积的需求,如果是矢量数据就比较容易统计面积,但数据如果是影像图,又是经纬度坐标(没有经过投影)就需要相应的一系列的处理。我这里拿到的是辽宁省的栅格图,坐标系统Xi”an80,其中分为五类地类,然后分别统计它们的面积。 数据是经纬度的坐标系统,没有进行投影,不能直接用经纬度计算面积,所以首先我们通过高斯投影将影像图的经纬度坐标转成平面直角坐标,在ArcCata_arcgis重分类后计算面积

已知函数定义 def func(**p): return ‘‘.join(sorted(p)) 那么表达式 func(x=1, y=2, z=3)的值为 xyz-程序员宅基地

文章浏览阅读7.5k次。下列解析def func(**p): return p print(func(x=1, y=2, z=3)) # {'x': 1, 'y': 2, 'z': 3}def func(**p): return sorted(p) print(func(x=1, y=2, z=3)) #['x', 'y', 'z']def func(**p): return ''.join(sorted(p)) print(func(x=1, y=2,_def func(**p)

推荐文章

热门文章

相关标签