|
@@ -2,49 +2,29 @@ import { Color } from '../math/Color.js';
|
|
|
import { Vector3 } from '../math/Vector3.js';
|
|
|
import { LightProbe } from './LightProbe.js';
|
|
|
|
|
|
-function HemisphereLightProbe( skyColor, groundColor, intensity ) {
|
|
|
+class HemisphereLightProbe extends LightProbe {
|
|
|
|
|
|
- LightProbe.call( this, undefined, intensity );
|
|
|
+ constructor( skyColor, groundColor, intensity = 1 ) {
|
|
|
|
|
|
- const color1 = new Color().set( skyColor );
|
|
|
- const color2 = new Color().set( groundColor );
|
|
|
+ super( undefined, intensity );
|
|
|
|
|
|
- const sky = new Vector3( color1.r, color1.g, color1.b );
|
|
|
- const ground = new Vector3( color2.r, color2.g, color2.b );
|
|
|
+ Object.defineProperty( this, 'isHemisphereLightProbe', { value: true } );
|
|
|
|
|
|
- // without extra factor of PI in the shader, should = 1 / Math.sqrt( Math.PI );
|
|
|
- const c0 = Math.sqrt( Math.PI );
|
|
|
- const c1 = c0 * Math.sqrt( 0.75 );
|
|
|
+ const color1 = new Color().set( skyColor );
|
|
|
+ const color2 = new Color().set( groundColor );
|
|
|
|
|
|
- this.sh.coefficients[ 0 ].copy( sky ).add( ground ).multiplyScalar( c0 );
|
|
|
- this.sh.coefficients[ 1 ].copy( sky ).sub( ground ).multiplyScalar( c1 );
|
|
|
+ const sky = new Vector3( color1.r, color1.g, color1.b );
|
|
|
+ const ground = new Vector3( color2.r, color2.g, color2.b );
|
|
|
|
|
|
-}
|
|
|
-
|
|
|
-HemisphereLightProbe.prototype = Object.assign( Object.create( LightProbe.prototype ), {
|
|
|
-
|
|
|
- constructor: HemisphereLightProbe,
|
|
|
-
|
|
|
- isHemisphereLightProbe: true,
|
|
|
-
|
|
|
- copy: function ( source ) { // modifying colors not currently supported
|
|
|
-
|
|
|
- LightProbe.prototype.copy.call( this, source );
|
|
|
+ // without extra factor of PI in the shader, should = 1 / Math.sqrt( Math.PI );
|
|
|
+ const c0 = Math.sqrt( Math.PI );
|
|
|
+ const c1 = c0 * Math.sqrt( 0.75 );
|
|
|
|
|
|
- return this;
|
|
|
-
|
|
|
- },
|
|
|
-
|
|
|
- toJSON: function ( meta ) {
|
|
|
-
|
|
|
- const data = LightProbe.prototype.toJSON.call( this, meta );
|
|
|
-
|
|
|
- // data.sh = this.sh.toArray(); // todo
|
|
|
-
|
|
|
- return data;
|
|
|
+ this.sh.coefficients[ 0 ].copy( sky ).add( ground ).multiplyScalar( c0 );
|
|
|
+ this.sh.coefficients[ 1 ].copy( sky ).sub( ground ).multiplyScalar( c1 );
|
|
|
|
|
|
}
|
|
|
|
|
|
-} );
|
|
|
+}
|
|
|
|
|
|
export { HemisphereLightProbe };
|