index.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. //UI
  2. var gui = new dat.GUI();
  3. var options = {
  4. engine: "webgl2",
  5. material: "standard",
  6. mesh: "sphere",
  7. hemisphericLight: true,
  8. pointLight: false,
  9. directionalLight: false,
  10. castShadows: false,
  11. spotLight: false,
  12. fog: false,
  13. skybox: false,
  14. lightIntensity: 1.0,
  15. lightIntensityMode: 0,
  16. lightRange: 1000,
  17. lightRadius: 0.0000001
  18. }
  19. var registeredUIs = {};
  20. var materialgui;
  21. window.registerColorPicker = function(material, name, color, onChange, onSet) {
  22. if (!registeredUIs[material]) {
  23. registeredUIs[material] = [];
  24. }
  25. registeredUIs[material].push({
  26. name: name,
  27. color: "#ff0000",
  28. onChange: onChange,
  29. onSet: onSet,
  30. type: "Color"
  31. });
  32. };
  33. window.registerBoolean = function(material, name, onChange, onSet) {
  34. if (!registeredUIs[material]) {
  35. registeredUIs[material] = [];
  36. }
  37. registeredUIs[material].push({
  38. name: name,
  39. onChange: onChange,
  40. onSet: onSet,
  41. type: "Boolean"
  42. });
  43. }
  44. window.registerRangeUI = function(material, name, minValue, maxValue, onChange, onSet) {
  45. if (!registeredUIs[material]) {
  46. registeredUIs[material] = [];
  47. }
  48. registeredUIs[material].push({
  49. name: name,
  50. minValue: minValue,
  51. maxValue: maxValue,
  52. onChange: onChange,
  53. onSet: onSet,
  54. type: "Range"
  55. });
  56. }
  57. window.setRangeValues = function(json) {
  58. for (var key in json) {
  59. if (json.hasOwnProperty(key)) {
  60. setRangeValue(key, json[key]);
  61. }
  62. }
  63. }
  64. window.setRangeValue = function(name, value) {
  65. if (!materialgui) {
  66. return;
  67. }
  68. var controllers = materialgui.__controllers;
  69. for (var i = 0; i < controllers.length; i++) {
  70. if (controllers[i].property == name) {
  71. controllers[i].setValue(value);
  72. }
  73. }
  74. }
  75. window.registerButtonUI = function(material, name, onClick) {
  76. if (!registeredUIs[material]) {
  77. registeredUIs[material] = [];
  78. }
  79. registeredUIs[material].push({
  80. name: name,
  81. onClick: onClick,
  82. type: "Button"
  83. });
  84. }
  85. var setUi = function(ui) {
  86. if (ui.type == "Range") {
  87. options[ui.name] = ui.onSet();
  88. var test = materialgui.add(options, ui.name, ui.minValue, ui.maxValue).onChange(function(value) {
  89. ui.onChange(value);
  90. });
  91. }
  92. else if (ui.type == "Color") {
  93. options[ui.name] = ui.onSet();
  94. materialgui.addColor(options, ui.name).onChange(function (value) {
  95. ui.onChange(value);
  96. })
  97. }
  98. else if (ui.type == "Button") {
  99. options[ui.name] = ui.onClick;
  100. materialgui.add(options, ui.name);
  101. }
  102. else if (ui.type == "Boolean") {
  103. options[ui.name] = ui.onSet();
  104. var test = materialgui.add(options, ui.name).onChange(function(value) {
  105. ui.onChange(value);
  106. });
  107. }
  108. }
  109. window.enableMaterial = function(material) {
  110. if (materialgui) {
  111. materialgui.domElement.parentElement.removeChild(materialgui.domElement);
  112. materialgui = null;
  113. }
  114. if (registeredUIs[material]) {
  115. materialgui = new dat.GUI();
  116. for (var index = 0; index < registeredUIs[material].length; index++) {
  117. var ui = registeredUIs[material][index];
  118. setUi(ui);
  119. }
  120. }
  121. }