three.js源碼翻譯-Layers.js

three.js源碼翻譯-Layers.js

說明

  • layer(層級)的概念不論是在哪個引擎或者3d庫中都是很重要的,因爲在實際的開發中,是有多個層級的實際要求的。
  • 比如在關卡遊戲中,往往一關中不只有boss關,之前也會有精英怪之類的,這時候通過層級就可以在同一關中精英怪和boss就可以無縫切換了。

源碼

源碼位置

arc/core/layers.js

源碼


/**
 * @author mrdoob / http://mrdoob.com/
 */

/**
 *	層級的概念其實是很重要的,比如在第一層放一些東西,然後在其他層放了一些東西,這樣通過換層級來控制模型或者
 *	其他東西的顯隱,在構建一些複雜的功能的時候是很重要的
 */
function Layers() {
	//默認層級爲1
	this.mask = 1 | 0;

}
//原型方法
Object.assign( Layers.prototype, {
	
	/**
	 * 設置層級
	 * @param {*} channel 
	 */
	set: function ( channel ) {

		this.mask = 1 << channel | 0;

	},
	//設置層級的數字 與disable配合使用
	enable: function ( channel ) {

		this.mask |= 1 << channel | 0;

	},
	//控制層級的顯隱
	toggle: function ( channel ) {

		this.mask ^= 1 << channel | 0;

	},
	//取消設置層級的數字
	disable: function ( channel ) {

		this.mask &= ~ ( 1 << channel | 0 );

	},
	//判斷兩個層級是否相同
	test: function ( layers ) {

		return ( this.mask & layers.mask ) !== 0;

	}

} );

實例

實例代碼

/*相機裏的設置是必要的*/
camera.layers.enable( 0 ); // enabled by default
camera.layers.enable( 1 );	camera.layers.enable( 2 );
/*燈光裏的設置是非必要的*/
light.layers.enable( 0 );
light.layers.enable( 1 );	light.layers.enable( 2 );
/*各層之間的顯隱控制*/
'toggle red': function() {
						camera.layers.toggle( 0 );},

'toggle green': function() {
camera.layers.toggle( 1 );
	},
	'toggle blue': function() {camera.layers.toggle( 2 );
	},

'enable all': function() {

	camera.layers.enableAll();
	},
'disable all': function() {
	camera.layers.disableAll();
	}

案例地址

layers案例地址

個人理解

layer這個概念在各個引擎,尤其是編輯器比較豐富的引擎中層級的概念是很重要的,反而three中的層級是計較雞肋的,個人感覺在three中至少應該把layer提升到group的層級,甚至提升到scene,通過雙向綁定把需要的mesh和各個層級進行關聯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章