1. 程式人生 > >three.js 原始碼註釋(四十二)Light/AreaLight.js

three.js 原始碼註釋(四十二)Light/AreaLight.js


俺也是剛開始學,好多地兒肯定不對還請見諒.

以下程式碼是THREE.JS 原始碼檔案中Light/AreaLight.js檔案的註釋.


/**
 * @author MPanknin / http://www.redplant.de/
 * @author alteredq / http://alteredqualia.com/
 */
 /*
///AreaLight方法根據設定燈光的顏屬性color, 強度屬性intensity 建立平面光(面光,區域光).AreaLight物件的功能函式採用
/// 定義構造的函式原型物件來實現,區域光和其他光源不同,是一種二維面積光源,他的亮度不僅和強度有關,而且還和他的面積大小有關.
/// 通過變換燈光的width,height,normal屬性,區域光可以模擬窗戶射入光線.\
/// TODO: AreaLight型別燈光在這個版本內還沒有實現陰影.???
/// Example:
/// 		var light = new THREE.AreaLight(0xff0000,1);	//建立平面燈光物件
/// 		light.position.set(50,50,30);	//設定位置
///			light.rotation.set(-0.3,0.3,0.002);	//設定角度
///			light.width = 10;	//設定寬度
///			light.height = 1;	//設定高度
///			scene.add(lignt);	//加入場景
*/
///<summary>AreaLight</summary>
///<param name ="color" type="THREE.Color">燈光的顏色屬性</param>
///<param name ="intensity" type="Number">燈光的強度,預設是1</param>
///<returns type="AreaLight">返回AreaLight,區域光.</returns>
THREE.AreaLight = function ( color, intensity ) {

	THREE.Light.call( this, color );	//呼叫Light物件的call方法,將原本屬於Light的方法交給當前物件AreaLight來使用.

	this.normal = new THREE.Vector3( 0, - 1, 0 );	//面光的法線.可以設定或者獲得面光的單位向量,確認燈光照射面正確.這是在區域性空間計算.
	this.right = new THREE.Vector3( 1, 0, 0 );		//

	this.intensity = ( intensity !== undefined ) ? intensity : 1;	//燈光的顏色屬性,如果不指定,初始化為1.

	this.width = 1.0;	//區域光的寬度,初始化為1.0
	this.height = 1.0;	//區域光的高度,初始化為1.0\

	//WebGL是通過光強乘以衰減係數來計算衰減光照的,
	//attenuation (衰減係數) = 1`/ (this.constantAttenuation + this.distance * this.linearAttenuation + this.quadraticAttenuation * this.distance * this.distance )
	this.constantAttenuation = 1.5;	//常量衰減係數,係數值越大,衰變越快。
	this.linearAttenuation = 0.5;	//線性衰減係數,係數值越大,衰變越快。
	this.quadraticAttenuation = 0.1;	//衰減平方係數,係數值越大,衰變越快。

};

/**************************************************************************************
****下面是AreaLight物件提供的功能函式定義,一部分通過prototype繼承自Light方法
***************************************************************************************/
THREE.AreaLight.prototype = Object.create( THREE.Light.prototype );	//AreaLight物件從THREE.Light的原型繼承所有屬性方法



以下程式碼是THREE.JS 原始碼檔案中Light/AreaLight.js檔案的註釋.