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