material.js 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. var constants = {
  2. side: {
  3. "THREE.FrontSide": THREE.FrontSide,
  4. "THREE.BackSide": THREE.BackSide,
  5. "THREE.DoubleSide": THREE.DoubleSide
  6. },
  7. shading: {
  8. "THREE.NoShading": THREE.NoShading,
  9. "THREE.FlatShading": THREE.FlatShading,
  10. "THREE.SmoothShading": THREE.SmoothShading
  11. },
  12. colors: {
  13. "THREE.NoColors": THREE.NoColors,
  14. "THREE.FaceColors": THREE.FaceColors,
  15. "THREE.VertexColors": THREE.VertexColors
  16. },
  17. blendingMode: {
  18. "THREE.NoBlending": THREE.NoBlending,
  19. "THREE.NormalBlending": THREE.NormalBlending,
  20. "THREE.AdditiveBlending": THREE.AdditiveBlending,
  21. "THREE.SubtractiveBlending": THREE.SubtractiveBlending,
  22. "THREE.MultiplyBlending": THREE.MultiplyBlending,
  23. "THREE.CustomBlending": THREE.CustomBlending
  24. },
  25. equations : {
  26. "THREE.AddEquation" : THREE.AddEquation,
  27. "THREE.SubtractEquation" : THREE.SubtractEquation,
  28. "THREE.ReverseSubtractEquation" : THREE.ReverseSubtractEquation
  29. },
  30. destinationFactors : {
  31. "THREE.ZeroFactor" : THREE.ZeroFactor,
  32. "THREE.OneFactor" : THREE.OneFactor,
  33. "THREE.SrcColorFactor" : THREE.SrcColorFactor,
  34. "THREE.OneMinusSrcColorFactor" : THREE.OneMinusSrcColorFactor,
  35. "THREE.SrcAlphaFactor" : THREE.SrcAlphaFactor,
  36. "THREE.OneMinusSrcAlphaFactor" : THREE.OneMinusSrcAlphaFactor,
  37. "THREE.DstAlphaFactor" : THREE.DstAlphaFactor,
  38. "THREE.OneMinusDstAlphaFactor" : THREE.OneMinusDstAlphaFactor
  39. },
  40. sourceFactors : {
  41. "THREE.DstColorFactor" : THREE.DstColorFactor,
  42. "THREE.OneMinusDstColorFactor" : THREE.OneMinusDstColorFactor,
  43. "THREE.SrcAlphaSaturateFactor" : THREE.SrcAlphaSaturateFactor
  44. }
  45. }
  46. function handleColorChange( color ) {
  47. return function( value ){
  48. if(typeof value === "string") {
  49. value = value.replace('#', '0x');
  50. }
  51. color.setHex( value );
  52. };
  53. }
  54. function guiMaterial( gui, material ) {
  55. var folder = gui.addFolder('THREE.Material');
  56. folder.add( material, 'transparent' );
  57. folder.add( material, 'opacity', 0, 1 );
  58. folder.add( material, 'blending', constants.blendingMode );
  59. folder.add( material, 'blendSrc', constants.destinationFactors );
  60. folder.add( material, 'blendDst', constants.destinationFactors );
  61. folder.add( material, 'blendEquation', constants.equations );
  62. folder.add( material, 'depthTest' );
  63. folder.add( material, 'depthWrite' );
  64. folder.add( material, 'polygonOffset' );
  65. folder.add( material, 'polygonOffsetFactor' );
  66. folder.add( material, 'polygonOffsetUnits' );
  67. folder.add( material, 'alphaTest' );
  68. folder.add( material, 'overdraw' );
  69. folder.add( material, 'visible' );
  70. folder.add( material, 'side', constants.side );
  71. }
  72. function guiMeshBasicMaterial( gui, material ) {
  73. var data = {
  74. color : material.color.getHex()
  75. };
  76. var folder = gui.addFolder('THREE.MeshBasicMaterial');
  77. folder.addColor( data, 'color' ).onChange( handleColorChange( material.color ) );
  78. folder.add( material, 'wireframe' );
  79. folder.add( material, 'wireframeLinewidth', 0, 10 );
  80. folder.add( material, 'wireframeLinecap', ["butt", "round", "square"] );
  81. folder.add( material, 'wireframeLinejoin', ["round", "bevel", "miter"] );
  82. folder.add( material, 'shading', constants.shading);
  83. folder.add( material, 'vertexColors', constants.colors);
  84. folder.add( material, 'fog' );
  85. //folder.add( material, 'lightMap' );
  86. //folder.add( material, 'specularMap' );
  87. //folder.add( material, 'alphaMap' );
  88. //folder.add( material, 'envMap' );
  89. //folder.add( material, 'skinning' );
  90. //folder.add( material, 'morphTargets' );
  91. //folder.add( material, 'map' );
  92. //folder.add( material, 'combine' );
  93. //folder.add( material, 'relectivity' );
  94. //folder.add( material, 'refractionRatio' );
  95. }
  96. function guiMeshDepthMaterial( gui, material ) {
  97. var folder = gui.addFolder('THREE.MeshDepthMaterial');
  98. folder.add( material, 'wireframe' );
  99. folder.add( material, 'wireframeLinewidth', 0, 10 );
  100. }
  101. function guiMeshNormalMaterial( gui, material ) {
  102. var folder = gui.addFolder('THREE.MeshNormalMaterial');
  103. folder.add( material, 'morphTargets');
  104. folder.add( material, 'shading', constants.shading);
  105. folder.add( material, 'wireframe' );
  106. folder.add( material, 'wireframeLinewidth', 0, 10 );
  107. }
  108. function guiLineBasicMaterial( gui, material ) {
  109. var data = {
  110. color : material.color.getHex()
  111. };
  112. var folder = gui.addFolder('THREE.LineBasicMaterial');
  113. folder.addColor( data, 'color' ).onChange( handleColorChange( material.color ) );
  114. folder.add( material, 'linewidth', 0, 10 );
  115. folder.add( material, 'linecap', ["butt", "round", "square"] );
  116. folder.add( material, 'linejoin', ["round", "bevel", "miter"] );
  117. folder.add( material, 'vertexColors', constants.colors);
  118. folder.add( material, 'fog' );
  119. }
  120. function guiMeshLambertMaterial( gui, material ) {
  121. var data = {
  122. color : material.color.getHex(),
  123. ambient : material.ambient.getHex(),
  124. emissive : material.emissive.getHex()
  125. };
  126. var folder = gui.addFolder('THREE.MeshLambertMaterial');
  127. folder.addColor( data, 'color' ).onChange( handleColorChange( material.color ) );
  128. folder.addColor( data, 'ambient' ).onChange( handleColorChange( material.ambient ) );
  129. folder.addColor( data, 'emissive' ).onChange( handleColorChange( material.emissive ) );
  130. folder.add( material, 'shading', constants.shading);
  131. folder.add( material, 'wireframe' );
  132. folder.add( material, 'wireframeLinewidth', 0, 10 );
  133. folder.add( material, 'wireframeLinecap', ["butt", "round", "square"] );
  134. folder.add( material, 'wireframeLinejoin', ["round", "bevel", "miter"] );
  135. folder.add( material, 'vertexColors', constants.colors);
  136. folder.add( material, 'fog' );
  137. }
  138. function guiMeshPhongMaterial( gui, material ) {
  139. var data = {
  140. color : material.color.getHex(),
  141. ambient : material.ambient.getHex(),
  142. emissive : material.emissive.getHex(),
  143. specular : material.specular.getHex()
  144. };
  145. var folder = gui.addFolder('THREE.MeshPhongMaterial');
  146. folder.addColor( data, 'color' ).onChange( handleColorChange( material.color ) );
  147. folder.addColor( data, 'ambient' ).onChange( handleColorChange( material.ambient ) );
  148. folder.addColor( data, 'emissive' ).onChange( handleColorChange( material.emissive ) );
  149. folder.addColor( data, 'specular' ).onChange( handleColorChange( material.specular ) );
  150. folder.add( material, 'shininess', 0, 100);
  151. folder.add( material, 'shading', constants.shading);
  152. folder.add( material, 'wireframe' );
  153. folder.add( material, 'wireframeLinewidth', 0, 10 );
  154. folder.add( material, 'wireframeLinecap', ["butt", "round", "square"] );
  155. folder.add( material, 'wireframeLinejoin', ["round", "bevel", "miter"] );
  156. folder.add( material, 'vertexColors', constants.colors);
  157. folder.add( material, 'fog' );
  158. }
  159. function chooseFromHash() {
  160. var selectedMaterial = window.location.hash.substring(1) || "MeshBasicMaterial";
  161. var material;
  162. var gui = new dat.GUI();
  163. switch (selectedMaterial) {
  164. case "MeshBasicMaterial":
  165. material = new THREE.MeshBasicMaterial({color: 0x00ff00});
  166. guiMaterial( gui, material );
  167. guiMeshBasicMaterial( gui, material );
  168. return material;
  169. break;
  170. case "MeshLambertMaterial":
  171. material = new THREE.MeshLambertMaterial({color: 0x00ff00});
  172. guiMaterial( gui, material );
  173. guiMeshLambertMaterial( gui, material );
  174. return material;
  175. break;
  176. case "MeshPhongMaterial":
  177. material = new THREE.MeshPhongMaterial({color: 0x00ff00});
  178. guiMaterial( gui, material );
  179. guiMeshPhongMaterial( gui, material );
  180. return material;
  181. break;
  182. case "MeshDepthMaterial":
  183. material = new THREE.MeshDepthMaterial({color: 0x00ff00});
  184. guiMaterial( gui, material );
  185. guiMeshDepthMaterial( gui, material );
  186. return material;
  187. break;
  188. case "MeshNormalMaterial":
  189. material = new THREE.MeshNormalMaterial();
  190. guiMaterial( gui, material );
  191. guiMeshNormalMaterial( gui, material );
  192. return material;
  193. break;
  194. case "LineBasicMaterial":
  195. material = new THREE.LineBasicMaterial({color: 0x00ff00});
  196. guiMaterial( gui, material );
  197. guiLineBasicMaterial( gui, material );
  198. return material;
  199. break;
  200. }
  201. }