three.js 源码注释(二十二)Core/Object3D.js

这篇博客详细注释了three.js库中的核心模块Object3D.js,深入剖析了该文件的代码实现,为web3d和webgl开发者提供了理解three.js内部工作机制的宝贵资源。作者强调了学习过程中的不足,并分享了源码的 GitHub 存储库链接以供进一步研究。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

商域无疆 (http://blog.youkuaiyun.com/omni360/)

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

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


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

以下代码是THREE.JS 源码文件中Core/Object3D.js文件的注释.

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


/**
 * @author mrdoob / http://mrdoob.com/
 * @author mikael emtinger / http://gomo.se/
 * @author alteredq / http://alteredqualia.com/
 * @author WestLangley / http://github.com/WestLangley
 */
/*
///Object3D是场景中图形对象的基类.Object3D对象的功能函数采用定义构造的函数原型对象来实现.
*/
///<summary>Object3D</summary>
THREE.Object3D = function () {

/****************************************
****下面是Object3D对象的属性定义
****************************************/

	this.id = THREE.Object3DIdCount ++;		//Object3D对象id属性.
	this.uuid = THREE.Math.generateUUID();	//调用THREE.Math.generateUUID()方法,Object3D对象uuid(通用唯一识别码)属性,

	this.name = '';		//Object3D对象name属性,可以为当前对象定义一个名称,初始化为''

	this.parent = undefined;		//Object3D对象parent属性,初始化为undefined.
	this.children = [];			//Object3D对象children属性,初始化为[].

	this.up = THREE.Object3D.DefaultUp.clone();	////Object3D对象up属性,当前对象的上方,初始化为THREE.Vector3( 0, 1, 0 )	

	var scope = this;

	var position = new THREE.Vector3();
	var rotation = new THREE.Euler();
	var quaternion = new THREE.Quaternion();
	var scale = new THREE.Vector3( 1, 1, 1 );

	rotation.onChange( function () {
		quaternion.setFromEuler( rotation, false );	//给对象的rotation属性绑定setFromEuler()方法,当rotation属性值更改,调用setFromEuler()方法
	} );

	quaternion.onChange( function () {
		rotation.setFromQuaternion( quaternion, undefined, false );		//给对象的quaternion属性绑定setFromQuaternion()方法,当rotation属性值更改,调用setFromEuler()方法
	} );

	Object.defineProperties( this, {
		position: {					//Object3D对象position属性
			enumerable: true,
			value: position
		},
		rotation: {					//Object3D对象rotation属性,以弧度为单位
			enumerable: true,
			value: rotation
		},
		quaternion: {					//Object3D对象quaternion属性,当useQuaternion属性为true,可用.
			enumerable: true,
			value: quaternion
		},
		scale: {					//Object3D对象scale属性
			enumerable: true,
			value: scale
		},
	} );

	this.renderDepth = null;		//Object3D对象renderDepth属性,初始化为null,如果设置了值将会覆盖渲染深度.

	this.rotationAutoUpdate = true;		//Object3D对象rotationAutoUpdate属性,初始化为true,表示每帧都会重新计算.

	this.matrix = new THREE.Matrix4();		//Object3D对象matrix属性,变换矩阵
	this.matrixWorld = new THREE.Matrix4();		//Object3D对象matrixWorld属性,如果当前对象是子对象,matrixWorld属性为上一级对象的变换矩阵,否则是自己的变换矩阵.

	this.matrixAutoUpdate = true;		//Object3D对象matrixAutoUpdate属性,初始化为true,表示每帧都会重新计算缩放,位置,旋转或四元数矩阵.matrixWorld属性也会重新计算
	this.matrixWorldNeedsUpdate = false;		//Object3D对象matrixWorldNeedsUpdate属性,初始化为false

	this.visible = true;		//Object3D对象visible属性,表示当前对象场景中是否可见,初始化为trure

	this.castShadow = false;		//Object3D对象castShadow属性,初始化为false,表示不产生阴影
	this.receiveShadow = false;		//Object3D对象receiveShadow属性,初始化为false,表示材质不接受烘焙阴影

	this.frustumCulled = true;		//Object3D对象frustumCulled属性,初始化为true

	this.userData = {};		//Object3D对象userData属性,初始化为{},用户自定义的其它属性,这里的数值不会被clone

};

THREE.Object3D.DefaultUp = new THREE.Vector3( 0, 1, 0 );	//设置Object3D对象的默认上方向.

/****************************************
****下面是Object3D对象提供的功能函数.
****************************************/
THREE.Object3D.prototype = {

	constructor: THREE.Object3D,	//构造器,返回对创建此对象Object3D函数的引用.

	/*
	///get eulerOrder 方法用来获得欧拉角的轴顺序
	///NOTE: get eulerOrder()的用法是Quaternion.prototype.eulerOrder,这种用法在除ie浏览器以外的浏览器上可以使用.
	///NOTE: .eulerOrder方法已经被删除了, 现在使用.rotation.order.这里保留这个方法,为了向下兼容.
	*/
	///<summary>get eulerOrder</summary>
	///<returns type="number">返回欧拉角的轴顺序</returns>
	get eulerOrder () {
		//.eulerOrder方法已经被删除了.这里保留这个方法, 现在使用.rotation.order.为了向下兼容.
		console.warn( 'THREE.Object3D: .eulerOrder has been moved to .rotation.order.' );
		//返回欧拉角的轴顺序
		retu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值