glassBarGraph.ts 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import { BarGraph } from "./barGraph";
  2. import { Scene, Material, PBRMaterial, Mesh, Vector3 } from "babylonjs";
  3. /** Class used to render bar graphs */
  4. export class GlassBarGraph extends BarGraph {
  5. private _innerMaterial: PBRMaterial;
  6. /**
  7. * Creates a new GlassBarGraph
  8. * @param name defines the name of the graph
  9. */
  10. constructor(name: string, scene?: Scene) {
  11. super(name, scene);
  12. this.onElementCreated.add(mesh => {
  13. // Clone the mesh
  14. var innerMesh = mesh.clone("Inner", mesh);
  15. innerMesh.material = this._innerMaterial;
  16. innerMesh.scaling = new Vector3(1, 1, 1);
  17. innerMesh.position = Vector3.Zero();
  18. mesh.alphaIndex = 0;
  19. innerMesh.alphaIndex = 1;
  20. });
  21. }
  22. protected _createBarMesh(name: string, scene: Scene): Mesh {
  23. var path = [
  24. new BABYLON.Vector3(0, 0, 0),
  25. new BABYLON.Vector3(0, 1.0, 0.0),
  26. ];
  27. var tube = BABYLON.MeshBuilder.CreateTube("tube", {
  28. path: path,
  29. tessellation:16,
  30. cap: Mesh.CAP_ALL,
  31. radius: 0.5}, scene);
  32. return tube;
  33. }
  34. protected _createDefaultMaterial(scene: Scene): Material {
  35. var result = new PBRMaterial("OuterGlass", scene);
  36. const dataSource = this.dataSource;
  37. let reflectionTexture = scene.environmentTexture;
  38. if (!reflectionTexture) {
  39. reflectionTexture = BABYLON.CubeTexture.CreateFromPrefilteredData("https://assets.babylonjs.com/environments/environmentSpecular.env", scene);
  40. }
  41. // Outside material
  42. result.alphaMode = BABYLON.Engine.ALPHA_SCREENMODE;
  43. result.reflectionTexture = reflectionTexture;
  44. result.alpha = 0.0;
  45. result.directIntensity = 1.0;
  46. result.environmentIntensity = 1.0;
  47. result.microSurface = 1;
  48. result.useAlphaFresnel = true;
  49. result.reflectivityColor = new BABYLON.Color3(0.01, 0.01, 0.01);
  50. result.albedoColor = new BABYLON.Color3(0, 0, 0);
  51. this._innerMaterial = new PBRMaterial("InnerGlass", scene);;
  52. this._innerMaterial.alphaMode = BABYLON.Engine.ALPHA_MULTIPLY;
  53. this._innerMaterial.alpha = 0;
  54. this._innerMaterial.directIntensity = 1.0;
  55. this._innerMaterial.environmentIntensity = 1.0;
  56. this._innerMaterial.microSurface = 0.0;
  57. this._innerMaterial.reflectivityColor = new BABYLON.Color3(0, 0, 0);
  58. if (dataSource) {
  59. this._innerMaterial.albedoColor = dataSource.color;
  60. }
  61. return result;
  62. }
  63. public dispose() {
  64. super.dispose();
  65. this._innerMaterial.dispose();
  66. }
  67. }