babylon.sphericalharmonics.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /// <reference path="../../../dist/preview release/babylon.d.ts"/>
  2. module BABYLON {
  3. export class SphericalHarmonics {
  4. public L00: Vector3 = Vector3.Zero();
  5. public L1_1: Vector3 = Vector3.Zero();
  6. public L10: Vector3 = Vector3.Zero();
  7. public L11: Vector3 = Vector3.Zero();
  8. public L2_2: Vector3 = Vector3.Zero();
  9. public L2_1: Vector3 = Vector3.Zero();
  10. public L20: Vector3 = Vector3.Zero();
  11. public L21: Vector3 = Vector3.Zero();
  12. public L22: Vector3 = Vector3.Zero();
  13. public addLight(direction: Vector3, color: Color3, deltaSolidAngle: number) : void
  14. {
  15. var colorVector = new Vector3(color.r, color.g, color.b);
  16. var c = colorVector.scale(deltaSolidAngle);
  17. this.L00 = this.L00.add(c.scale(0.282095));
  18. this.L1_1 = this.L1_1.add(c.scale(0.488603 * direction.y));
  19. this.L10 = this.L10.add(c.scale(0.488603 * direction.z));
  20. this.L11 = this.L11.add(c.scale(0.488603 * direction.x));
  21. this.L2_2 = this.L2_2.add(c.scale(1.092548 * direction.x * direction.y));
  22. this.L2_1 = this.L2_1.add(c.scale(1.092548 * direction.y * direction.z));
  23. this.L21 = this.L21.add(c.scale(1.092548 * direction.x * direction.z));
  24. this.L20 = this.L20.add(c.scale(0.315392 * (3.0 * direction.z * direction.z - 1.0)));
  25. this.L22 = this.L22.add(c.scale(0.546274 * (direction.x * direction.x - direction.y * direction.y)));
  26. }
  27. public scale(scale: number): void
  28. {
  29. this.L00 = this.L00.scale(scale);
  30. this.L1_1 = this.L1_1.scale(scale);
  31. this.L10 = this.L10.scale(scale);
  32. this.L11 = this.L11.scale(scale);
  33. this.L2_2 = this.L2_2.scale(scale);
  34. this.L2_1 = this.L2_1.scale(scale);
  35. this.L20 = this.L20.scale(scale);
  36. this.L21 = this.L21.scale(scale);
  37. this.L22 = this.L22.scale(scale);
  38. }
  39. }
  40. }