gui.js 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. var createScene = function () {
  2. var scene = new BABYLON.Scene(engine);
  3. var camera = new BABYLON.ArcRotateCamera("Camera", -Math.PI / 2, 1.0, 110, BABYLON.Vector3.Zero(), scene);
  4. camera.attachControl(canvas, true);
  5. var hemi = new BABYLON.HemisphericLight("toto");
  6. var sphereMaterial = new BABYLON.StandardMaterial();
  7. //Creation of 6 spheres
  8. var sphere1 = BABYLON.Mesh.CreateSphere("Sphere1", 10.0, 9.0, scene);
  9. var sphere2 = BABYLON.Mesh.CreateSphere("Sphere2", 2.0, 9.0, scene);//Only two segments
  10. var sphere3 = BABYLON.Mesh.CreateSphere("Sphere3", 10.0, 9.0, scene);
  11. var sphere4 = BABYLON.Mesh.CreateSphere("Sphere4", 10.0, 0.5, scene);
  12. var sphere5 = BABYLON.Mesh.CreateSphere("Sphere5", 10.0, 9.0, scene);
  13. var sphere6 = BABYLON.Mesh.CreateSphere("Sphere6", 10.0, 9.0, scene);
  14. var sphere7 = BABYLON.Mesh.CreateSphere("Sphere7", 10.0, 9.0, scene);
  15. //Position the spheres
  16. sphere1.position.x = -30;
  17. sphere2.position.x = -20;
  18. sphere3.position.x = -10;
  19. sphere4.position.x = 0;
  20. sphere5.position.x = 10;
  21. sphere6.position.x = 20;
  22. sphere7.position.x = 30;
  23. // Material
  24. sphere1.material = sphereMaterial;
  25. sphere2.material = sphereMaterial;
  26. sphere3.material = sphereMaterial;
  27. sphere4.material = sphereMaterial;
  28. sphere5.material = sphereMaterial;
  29. sphere6.material = sphereMaterial;
  30. sphere7.material = sphereMaterial;
  31. // GUI
  32. var advancedTexture = BABYLON.GUI.AdvancedDynamicTexture.CreateFullscreenUI("ui1");
  33. var panel = new BABYLON.GUI.StackPanel();
  34. panel.width = 0.25;
  35. panel.rotation = 0.2;
  36. panel.horizontalAlignment = BABYLON.GUI.Control.HORIZONTAL_ALIGNMENT_LEFT;
  37. advancedTexture.addControl(panel);
  38. var button1 = BABYLON.GUI.Button.CreateSimpleButton("but1", "Click Me");
  39. button1.width = 0.2;
  40. button1.height = "40px";
  41. button1.color = "white";
  42. button1.cornerRadius = 20;
  43. button1.background = "green";
  44. button1.onPointerUpObservable.add(function() {
  45. circle.scaleX += 0.1;
  46. });
  47. panel.addControl(button1);
  48. var circle = new BABYLON.GUI.Ellipse();
  49. circle.width = "50px";
  50. circle.color = "white";
  51. circle.thickness = 5;
  52. circle.height = "50px";
  53. circle.paddingTop = "2px";
  54. circle.paddingBottom = "2px";
  55. panel.addControl(circle);
  56. var button2 = BABYLON.GUI.Button.CreateSimpleButton("but2", "Click Me 2");
  57. button2.width = 0.2;
  58. button2.height = "40px";
  59. button2.color = "white";
  60. button2.background = "green";
  61. button2.onPointerUpObservable.add(function() {
  62. circle.scaleX -= 0.1;
  63. });
  64. panel.addControl(button2);
  65. var createLabel = function(mesh) {
  66. var label = new BABYLON.GUI.Rectangle("label for " + mesh.name);
  67. label.background = "black"
  68. label.height = "30px";
  69. label.alpha = 0.5;
  70. label.width = "100px";
  71. label.cornerRadius = 20;
  72. label.thickness = 1;
  73. label.linkOffsetY = 30;
  74. advancedTexture.addControl(label);
  75. label.linkWithMesh(mesh);
  76. var text1 = new BABYLON.GUI.TextBlock();
  77. text1.text = mesh.name;
  78. text1.color = "white";
  79. label.addControl(text1);
  80. }
  81. createLabel(sphere1);
  82. createLabel(sphere2);
  83. createLabel(sphere3);
  84. createLabel(sphere4);
  85. createLabel(sphere5);
  86. createLabel(sphere6);
  87. var label = new BABYLON.GUI.Rectangle("label for " + sphere7.name);
  88. label.background = "black"
  89. label.height = "30px";
  90. label.alpha = 0.5;
  91. label.width = "100px";
  92. label.cornerRadius = 20;
  93. label.thickness = 1;
  94. label.linkOffsetY = 30;
  95. label.top = "10%";
  96. label.zIndex = 5;
  97. label.verticalAlignment = BABYLON.GUI.Control.VERTICAL_ALIGNMENT_TOP;
  98. advancedTexture.addControl(label);
  99. var text1 = new BABYLON.GUI.TextBlock();
  100. text1.text = sphere7.name;
  101. text1.color = "white";
  102. label.addControl(text1);
  103. var line = new BABYLON.GUI.Line();
  104. line.alpha = 0.5;
  105. line.lineWidth = 5;
  106. line.dash = [5, 10];
  107. advancedTexture.addControl(line);
  108. line.linkWithMesh(sphere7);
  109. line.connectedControl = label;
  110. var endRound = new BABYLON.GUI.Ellipse();
  111. endRound.width = "10px";
  112. endRound.background = "black";
  113. endRound.height = "10px";
  114. endRound.color = "white";
  115. advancedTexture.addControl(endRound);
  116. endRound.linkWithMesh(sphere7);
  117. // Plane
  118. var plane = BABYLON.Mesh.CreatePlane("plane", 20);
  119. plane.parent = sphere4;
  120. plane.position.y = -10;
  121. // GUI
  122. var advancedTexture2 = BABYLON.GUI.AdvancedDynamicTexture.CreateForMesh(plane);
  123. var panel2 = new BABYLON.GUI.StackPanel();
  124. panel2.top = "100px";
  125. advancedTexture2.addControl(panel2);
  126. var button1 = BABYLON.GUI.Button.CreateSimpleButton("but1", "Click Me");
  127. button1.width = 1;
  128. button1.height = "100px";
  129. button1.color = "white";
  130. button1.fontSize = 50;
  131. button1.background = "green";
  132. panel2.addControl(button1);
  133. var textblock = new BABYLON.GUI.TextBlock();
  134. textblock.height = "150px";
  135. textblock.fontSize = 100;
  136. textblock.text = "please pick an option:";
  137. panel2.addControl(textblock);
  138. var addRadio = function(text, parent) {
  139. var button = new BABYLON.GUI.RadioButton();
  140. button.width = "40px";
  141. button.height = "40px";
  142. button.color = "white";
  143. button.background = "green";
  144. button.onIsCheckedChangedObservable.add(function(state) {
  145. if (state) {
  146. textblock.text = "You selected " + text;
  147. }
  148. });
  149. var header = BABYLON.GUI.Control.AddHeader(button, text, "400px", { isHorizontal: true, controlFirst: true });
  150. header.height = "100px";
  151. header.children[1].fontSize = 80;
  152. header.children[1].onPointerDownObservable.add(function() {
  153. button.isChecked = !button.isChecked;
  154. });
  155. parent.addControl(header);
  156. }
  157. addRadio("option 1", panel2);
  158. addRadio("option 2", panel2);
  159. addRadio("option 3", panel2);
  160. addRadio("option 4", panel2);
  161. addRadio("option 5", panel2);
  162. scene.registerBeforeRender(function() {
  163. panel.rotation += 0.01;
  164. });
  165. // Another GUI on the right
  166. var advancedTexture = BABYLON.GUI.AdvancedDynamicTexture.CreateFullscreenUI("UI");
  167. advancedTexture.layer.layerMask = 2;
  168. var panel3 = new BABYLON.GUI.StackPanel();
  169. panel3.width = "220px";
  170. panel3.fontSize = "14px";
  171. panel3.horizontalAlignment = BABYLON.GUI.Control.HORIZONTAL_ALIGNMENT_RIGHT;
  172. panel3.verticalAlignment = BABYLON.GUI.Control.VERTICAL_ALIGNMENT_CENTER;
  173. advancedTexture.addControl(panel3);
  174. var checkbox = new BABYLON.GUI.Checkbox();
  175. checkbox.width = "20px";
  176. checkbox.height = "20px";
  177. checkbox.isChecked = true;
  178. checkbox.color = "green";
  179. var panelForCheckbox = BABYLON.GUI.Control.AddHeader(checkbox, "checkbox", "180px", { isHorizontal: true, controlFirst: true});
  180. panelForCheckbox.color = "white";
  181. panelForCheckbox.height = "20px";
  182. panelForCheckbox.horizontalAlignment = BABYLON.GUI.Control.HORIZONTAL_ALIGNMENT_LEFT;
  183. panel3.addControl(panelForCheckbox);
  184. var header = new BABYLON.GUI.TextBlock();
  185. header.text = "Slider:";
  186. header.height = "40px";
  187. header.color = "white";
  188. header.textHorizontalAlignment = BABYLON.GUI.Control.HORIZONTAL_ALIGNMENT_LEFT;
  189. header.paddingTop = "10px";
  190. panel3.addControl(header);
  191. var slider = new BABYLON.GUI.Slider();
  192. slider.horizontalAlignment = BABYLON.GUI.Control.HORIZONTAL_ALIGNMENT_LEFT;
  193. slider.minimum = 0;
  194. slider.maximum = 2 * Math.PI;
  195. slider.color = "green";
  196. slider.value = 0;
  197. slider.height = "20px";
  198. slider.width = "200px";
  199. panel3.addControl(slider);
  200. header = new BABYLON.GUI.TextBlock();
  201. header.text = "Sphere diffuse:";
  202. header.height = "40px";
  203. header.color = "white";
  204. header.textHorizontalAlignment = BABYLON.GUI.Control.HORIZONTAL_ALIGNMENT_LEFT;
  205. header.paddingTop = "10px";
  206. panel3.addControl(header);
  207. var picker = new BABYLON.GUI.ColorPicker();
  208. picker.horizontalAlignment = BABYLON.GUI.Control.HORIZONTAL_ALIGNMENT_LEFT;
  209. picker.value = sphereMaterial.diffuseColor;
  210. picker.height = "150px";
  211. picker.width = "150px";
  212. picker.onValueChangedObservable.add(function(value) { // value is a color3
  213. sphereMaterial.diffuseColor = value;
  214. });
  215. panel3.addControl(picker);
  216. return scene;
  217. };