ShadowMaterial.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /**
  2. * @author mrdoob / http://mrdoob.com/
  3. */
  4. THREE.ShadowMaterial = function () {
  5. THREE.ShaderMaterial.call( this, {
  6. uniforms: THREE.UniformsUtils.merge( [
  7. THREE.UniformsLib[ "lights" ],
  8. {
  9. opacity: { type: 'f', value: 1.0 }
  10. }
  11. ] ),
  12. vertexShader: [
  13. THREE.ShaderChunk[ "shadowmap_pars_vertex" ],
  14. "void main() {",
  15. THREE.ShaderChunk[ "begin_vertex" ],
  16. THREE.ShaderChunk[ "project_vertex" ],
  17. THREE.ShaderChunk[ "worldpos_vertex" ],
  18. THREE.ShaderChunk[ "shadowmap_vertex" ],
  19. "}"
  20. ].join( '\n' ),
  21. fragmentShader: [
  22. THREE.ShaderChunk[ "common" ],
  23. THREE.ShaderChunk[ "packing" ],
  24. THREE.ShaderChunk[ "bsdfs" ],
  25. THREE.ShaderChunk[ "lights_pars" ],
  26. THREE.ShaderChunk[ "shadowmap_pars_fragment" ],
  27. THREE.ShaderChunk[ "shadowmask_pars_fragment" ],
  28. "uniform float opacity;",
  29. "void main() {",
  30. " gl_FragColor = vec4( 0.0, 0.0, 0.0, opacity * ( 1.0 - getShadowMask() ) );",
  31. "}"
  32. ].join( '\n' )
  33. } );
  34. this.lights = true;
  35. this.transparent = true;
  36. Object.defineProperties( this, {
  37. opacity: {
  38. enumerable: true,
  39. get: function () {
  40. return this.uniforms.opacity.value;
  41. },
  42. set: function ( value ) {
  43. this.uniforms.opacity.value = value;
  44. }
  45. }
  46. } );
  47. };
  48. THREE.ShadowMaterial.prototype = Object.create( THREE.ShaderMaterial.prototype );
  49. THREE.ShadowMaterial.prototype.constructor = THREE.ShadowMaterial;