ShaderMaterial.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. /**
  2. * @author alteredq / http://alteredqualia.com/
  3. *
  4. * parameters = {
  5. * fragmentShader: <string>,
  6. * vertexShader: <string>,
  7. *
  8. * uniforms: { "parameter1": { type: "f", value: 1.0 }, "parameter2": { type: "i" value2: 2 } },
  9. *
  10. * defines: { "label" : "value" },
  11. *
  12. * shading: THREE.SmoothShading,
  13. * blending: THREE.NormalBlending,
  14. * depthTest: <bool>,
  15. * depthWrite: <bool>,
  16. *
  17. * wireframe: <boolean>,
  18. * wireframeLinewidth: <float>,
  19. *
  20. * lights: <bool>,
  21. *
  22. * vertexColors: THREE.NoColors / THREE.VertexColors / THREE.FaceColors,
  23. *
  24. * skinning: <bool>,
  25. * morphTargets: <bool>,
  26. * morphNormals: <bool>,
  27. *
  28. * fog: <bool>
  29. * }
  30. */
  31. THREE.ShaderMaterial = function ( parameters ) {
  32. THREE.Material.call( this );
  33. this.fragmentShader = "void main() {}";
  34. this.vertexShader = "void main() {}";
  35. this.uniforms = {};
  36. this.defines = {};
  37. this.attributes = null;
  38. this.shading = THREE.SmoothShading;
  39. this.linewidth = 1;
  40. this.wireframe = false;
  41. this.wireframeLinewidth = 1;
  42. this.fog = false; // set to use scene fog
  43. this.lights = false; // set to use scene lights
  44. this.vertexColors = THREE.NoColors; // set to use "color" attribute stream
  45. this.skinning = false; // set to use skinning attribute streams
  46. this.morphTargets = false; // set to use morph targets
  47. this.morphNormals = false; // set to use morph normals
  48. // When rendered geometry doesn't include these attributes but the material does,
  49. // use these default values in WebGL. This avoids errors when buffer data is missing.
  50. this.defaultAttributeValues = {
  51. "color" : [ 1, 1, 1 ],
  52. "uv" : [ 0, 0 ],
  53. "uv2" : [ 0, 0 ]
  54. };
  55. this.index0AttributeName = undefined;
  56. this.setValues( parameters );
  57. };
  58. THREE.ShaderMaterial.prototype = Object.create( THREE.Material.prototype );
  59. THREE.ShaderMaterial.prototype.clone = function () {
  60. var material = new THREE.ShaderMaterial();
  61. THREE.Material.prototype.clone.call( this, material );
  62. material.fragmentShader = this.fragmentShader;
  63. material.vertexShader = this.vertexShader;
  64. material.uniforms = THREE.UniformsUtils.clone( this.uniforms );
  65. material.attributes = this.attributes;
  66. material.defines = this.defines;
  67. material.shading = this.shading;
  68. material.wireframe = this.wireframe;
  69. material.wireframeLinewidth = this.wireframeLinewidth;
  70. material.fog = this.fog;
  71. material.lights = this.lights;
  72. material.vertexColors = this.vertexColors;
  73. material.skinning = this.skinning;
  74. material.morphTargets = this.morphTargets;
  75. material.morphNormals = this.morphNormals;
  76. return material;
  77. };