three.js源码翻译-HemisphereLight.js
说明
HemisphereLight类为半球光,啥叫半球光呢,就是用来模拟户外太阳照射的一种光源,那HemisphereLight和DirectionLight都是模拟太阳光,那有什么不同呢。首先方向光用来模拟那种无限远的平行光,而半球光用来模拟的是那种有散射效果的太阳光,引入的原因也是因为即便是方向光加上环境光模拟出的太阳光也和真正的太阳光照射出的效果相去甚远,半球光就是用来解决这种情况的,虽然效果理真实的还是很远,但是有进步。
源码位置及翻译
源码位置
src/light/HemisphereLight.js
源码翻译
/**
* 半球光,模拟的室外的日光照射情况,看到这俩属性忽然想起来写VRML的时候的天空盒的设置了,O(∩_∩)O哈哈~
* 从代码中可以看出,天空颜色是作为灯光的颜色传递的,但是地面颜色就是在渲染的时候另外做设置的了
* @param {*} skyColor 天空的颜色
* @param {*} groundColor 地面的颜色
* @param {*} intensity 光照强度
*/
function HemisphereLight( skyColor, groundColor, intensity ) {
//继承灯光基类
Light.call( this, skyColor, intensity );
this.type = 'HemisphereLight';
this.castShadow = undefined;
this.position.copy( Object3D.DefaultUp );
this.updateMatrix();
//上面的和方向光的设置一样,不一样的只是多了个地面颜色
this.groundColor = new Color( groundColor );
}
HemisphereLight.prototype = Object.assign( Object.create( Light.prototype ), {
constructor: HemisphereLight,
isHemisphereLight: true,
//复制方法
copy: function ( source ) {
Light.prototype.copy.call( this, source );
this.groundColor.copy( source.groundColor );
return this;
}
} );
示例及案例
创建
let hemisphereLight = new THREE.HemisphereLight( 0xff0000, 0x00ff00, 0.6 );
hemisphereLight.position.set( 0, 100, 0 );
scene.add( hemisphereLight );
注意的点
- 半球光也是没有阴影的
- 需要传入两个颜色,分别为天空颜色和地面颜色