程序员人生 网站导航

three.js 源码注释(三十三)Scenes/Scene.js

栏目:htmlcss时间:2014-12-09 08:00:25

商域无疆 (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

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐