three.js 源碼注釋(三十三)Scenes/Scene.js
來(lái)源:程序員人生 發(fā)布時(shí)間:2014-12-09 08:00:25 閱讀次數(shù):2748次
商域無(wú)疆 (http://blog.csdn.net/omni360/)
本文遵守“署名-非商業(yè)用處-保持1致”創(chuàng)作公用協(xié)議
轉(zhuǎn)載請(qǐng)保存此句:商域無(wú)疆 - 本博客專注于 敏捷開發(fā)及移動(dòng)和物聯(lián)裝備研究:數(shù)據(jù)可視化、GOLANG、Html5、WEBGL、THREE.JS,否則,出自本博客的文章謝絕轉(zhuǎn)載或再轉(zhuǎn)載,謝謝合作。
俺也是剛開始學(xué),好多地兒肯定不對(duì)還請(qǐng)見諒.
以下代碼是THREE.JS 源碼文件中Scenes/Scene.js文件的注釋.
更多更新在 : https://github.com/omni360/three.js.sourcecode
/**
* @author mrdoob / http://mrdoob.com/
*/
/*
///Scene是場(chǎng)景對(duì)象,所有的對(duì)象,燈光,動(dòng)畫,骨骼等都需要放置在場(chǎng)景內(nèi).Scene對(duì)象的功能函數(shù)采取定義構(gòu)造的函數(shù)原型對(duì)象來(lái)實(shí)現(xiàn).
*/
///<summary>Scene</summary>
THREE.Scene = function () {
THREE.Object3D.call( this ); //調(diào)用Object3D對(duì)象的call方法,將本來(lái)屬于Object3D的方法交給當(dāng)前對(duì)象Scene來(lái)使用.
this.fog = null; //場(chǎng)景的霧效屬性
this.overrideMaterial = null; //場(chǎng)景的材質(zhì)屬性,默許為null,如果設(shè)置了這個(gè)屬性,場(chǎng)景中的所有對(duì)象渲染成這個(gè)材質(zhì).
this.autoUpdate = true; // checked by the renderer
//默許為true,表示渲染器每幀都會(huì)檢查場(chǎng)景和場(chǎng)景中的對(duì)象的矩陣的是不是更新,如果為false,場(chǎng)景中的對(duì)象將不會(huì)被自動(dòng)更新.
/***********************新版中已刪除********************************
this.matrixAutoUpdate = false; //默許為false,場(chǎng)景中的矩陣是不是自動(dòng)更新,新版中已刪除這個(gè)屬性.
**********************************************************************/
this.__lights = []; //場(chǎng)景中的所有燈光寄存在__lights屬性數(shù)組中,新版中已刪除這個(gè)屬性
/***********************新版中已刪除********************************
this.__objectsAdded = []; //場(chǎng)景中的添加的所有相機(jī)和骨骼寄存在__objectsAdded屬性數(shù)組中,新版中已刪除這個(gè)屬性
this.__objectsRemoved = []; //場(chǎng)景中的刪除的所有相機(jī)和骨骼寄存在__objectsRemoved屬性數(shù)組中,新版中已刪除這個(gè)屬性
//TODO: 這里的屬性啥意思?是新加的?添加的相機(jī)應(yīng)當(dāng)在children數(shù)組內(nèi)呀?應(yīng)當(dāng)是這里為了提高效力將相機(jī)和骨骼單獨(dú)放到這個(gè)屬性數(shù)組中.
**********************************************************************/
};
/*************************************************
****下面是Scene對(duì)象的方法屬性定義,繼承自O(shè)bject3D
**************************************************/
THREE.Scene.prototype = Object.create( THREE.Object3D.prototype ); //Scene對(duì)象從THREE.Objec3D的原型繼承所有屬性方法
/************************************下面的方法已在新版中刪除******************************************
//
///__addObject方法用來(lái)添加燈光對(duì)象到場(chǎng)景的__lights屬性數(shù)組中,添加相機(jī)和骨骼到場(chǎng)景的__objectsAdded
/// NOTE:新版中已刪除這個(gè)方法
//
///<summary>__addObject</summary>
///<param name ="object" type="Light,Carmera,Bone">Light,Carmera,Bone,可以包括子對(duì)象</param>
///<returns type="Scene">返回新的Scene對(duì)象</returns>
THREE.Scene.prototype.__addObject = function ( object ) {
if ( object instanceof THREE.Light ) { //如果是燈光,
if ( this.__lights.indexOf( object ) === - 1 ) {
this.__lights.push( object ); //添加到__lights屬性數(shù)組中
}
if ( object.target && object.target.parent === undefined ) {
this.add( object.target );
}
} else if ( ! ( object instanceof THREE.Camera || object instanceof THREE.Bone ) ) { //如果是骨骼或相機(jī)
this.__objectsAdded.push( object ); //添加到__objectsAdded屬性數(shù)組中
// check if previously removed
// 檢查對(duì)象是不是已被刪除
var i = this.__objectsRemoved.indexOf( object ); //如果對(duì)象唄刪除過(guò)
if ( i !== - 1 ) {
this.__objectsRemoved.splice( i, 1 ); //從__objectsRemoved數(shù)組中刪除.
}
}
this.dispatchEvent( { type: 'objectAdded', object: object } ); //調(diào)度事件
object.dispatchEvent( { type: 'addedToScene', scene: this } ); //調(diào)度事件
for ( var c = 0; c < object.children.length; c ++ ) { //如果對(duì)象有子對(duì)象
this.__addObject( object.children[ c ] ); //將子對(duì)象也添加到__objectsAdded屬性數(shù)組中
}
};
//
///__removeObject方法用來(lái)從場(chǎng)景的__lights屬性數(shù)組中刪除燈光對(duì)象,添加相機(jī)和骨骼從場(chǎng)景的__objectsRemoved
/// NOTE:新版中已刪除這個(gè)方法
//
///<summary>__removeObject</summary>
///<param name ="object" type="Light,Carmera,Bone">Light,Carmera,Bone,可以包括子對(duì)象</param>
///<returns type="Scene">返回新的Scene對(duì)象</returns>
THREE.Scene.prototype.__removeObject = function ( object ) {
if ( object instanceof THREE.Light ) {
var i = this.__lights.indexOf( object );
if ( i !== - 1 ) {
this.__lights.splice( i, 1 );
}
if ( object.shadowCascadeArray ) {
for ( var x = 0; x < object.shadowCascadeArray.length; x ++ ) {
this.__removeObject( object.shadowCascadeArray[ x ] );
}
}
} else if ( ! ( object instanceof THREE.Camera ) ) {
this.__objectsRemoved.push( object );
// check if previously added
// 檢查對(duì)象是不是已添加.
var i = this.__objectsAdded.indexOf( object );
if ( i !== - 1 ) {
this.__objectsAdded.splice( i, 1 );
}
}
this.dispatchEvent( { type: 'objectRemoved', object: object } );
object.dispatchEvent( { type: 'removedFromScene', scene: this } );
for ( var c = 0; c < object.children.length; c ++ ) {
this.__removeObject( object.children[ c ] );
}
};
**************************************************************************/
/*clone方法
///clone方法克隆1個(gè)Scene對(duì)象,將屬性數(shù)組分別復(fù)制.
*/
///<summary>clone</summary>
///<returns type="Scene">返回克隆的Scene對(duì)象</returns>
THREE.Scene.prototype.clone = function ( object ) {
if ( object === undefined ) object = new THREE.Scene();
THREE.Object3D.prototype.clone.call( this, object );
if ( this.fog !== null ) object.fog = this.fog.clone();
if ( this.overrideMaterial !== null ) object.overrideMaterial = this.overrideMaterial.clone();
object.autoUpdate = this.autoUpdate;
/***********************新版中已刪除********************************
object.matrixAutoUpdate = this.matrixAutoUpdate; //新版中已刪除
**********************************************************************/
return object; //返回克隆的Scene對(duì)象
};
商域無(wú)疆 (http://blog.csdn.net/omni360/)
本文遵守“署名-非商業(yè)用處-保持1致”創(chuàng)作公用協(xié)議
轉(zhuǎn)載請(qǐng)保存此句:商域無(wú)疆 - 本博客專注于 敏捷開發(fā)及移動(dòng)和物聯(lián)裝備研究:數(shù)據(jù)可視化、GOLANG、Html5、WEBGL、THREE.JS,否則,出自本博客的文章謝絕轉(zhuǎn)載或再轉(zhuǎn)載,謝謝合作。
以下代碼是THREE.JS 源碼文件中Scenes/Scene.js文件的注釋.
更多更新在 : https://github.com/omni360/three.js.sourcecode
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)