addfur.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. window.prepareFur = function() {
  2. var shells = 30;
  3. var meshes = [];
  4. var diffuseTexture = new BABYLON.Texture("/playground/textures/leopard_fur.JPG", scene);
  5. var heightTexture = new BABYLON.Texture("/playground/textures/speckles.jpg", scene);
  6. var furTexture = BABYLON.FurMaterial.GenerateTexture("furTexture", scene);
  7. var fur = new BABYLON.FurMaterial("fur", scene);
  8. fur.furLength = 4;
  9. fur.furAngle = 0;
  10. fur.furColor = new BABYLON.Color3(1.0, 1.0, 1.0);
  11. fur.diffuseTexture = diffuseTexture;
  12. fur.furTexture = furTexture;
  13. // Sets the same value to all shells
  14. var setValue = function(property, value) {
  15. for (var i=0; i < meshes.length; i++) {
  16. meshes[i].material[property] = value;
  17. }
  18. }
  19. var resetFur = function() {
  20. for (var i=1; i < meshes.length; i++) {
  21. meshes[i].material.dispose();
  22. meshes[i].dispose();
  23. }
  24. meshes = [];
  25. };
  26. var setMeshesVisible = function(visible) {
  27. for (var i=1; i < meshes.length; i++) {
  28. meshes[i].isVisible = visible;
  29. }
  30. }
  31. var configureFur = function(mesh) {
  32. mesh.material = fur;
  33. meshes = BABYLON.FurMaterial.FurifyMesh(mesh, shells);
  34. // For animated meshes
  35. for (var i=0; i < scene.skeletons.length; i++) {
  36. scene.beginAnimation(scene.skeletons[i], 0, 100, true, 0.8);
  37. }
  38. }
  39. // fur length
  40. registerRangeUI("fur", "Fur length", 0, 45, function(value) {
  41. setValue("furLength", value);
  42. }, function() {
  43. return fur.furLength;
  44. });
  45. // fur angle
  46. registerRangeUI("fur", "Fur angle", 0, Math.PI/2, function(value) {
  47. setValue("furAngle", value);
  48. }, function() {
  49. return fur.furAngle;
  50. });
  51. // fur color
  52. registerColorPicker("fur", "Fur color", "#703605", function(value) {
  53. fur.furColor.r = value.r/255;
  54. fur.furColor.g = value.g/255;
  55. fur.furColor.b = value.b/255;
  56. }, function() {
  57. return fur.furColor;
  58. });
  59. var DTON = false;
  60. registerButtonUI("fur", "Tgl Diffuse Tex", function() {
  61. DTON = !DTON;
  62. setValue("diffuseTexture", DTON ? diffuseTexture : null);
  63. });
  64. var HTON = false;
  65. registerButtonUI("fur", "Tgl Height Tex", function() {
  66. HTON = !HTON;
  67. setValue("heightTexture", HTON ? heightTexture : null);
  68. });
  69. // If High level fur
  70. registerRangeUI("fur", "Hight Level fur", false, true, function(value) {
  71. setValue("highLevelFur", value);
  72. setMeshesVisible(value);
  73. }, function() {
  74. return fur.highLevelFur;
  75. });
  76. // Fur density
  77. registerRangeUI("fur", "Fur Density", 1, 50, function(value) {
  78. setValue("furDensity", value);
  79. }, function() {
  80. return fur.furDensity;
  81. });
  82. // Fur Gravity
  83. registerRangeUI("fur", "Fur Gravity", 0, 1, function(value) {
  84. setValue("furGravity", new BABYLON.Vector3(value, value, value));
  85. }, function() {
  86. return fur.furGravity.x;
  87. });
  88. // Fur animation speed
  89. registerRangeUI("fur", "Fur speed", 1, 1000, function(value) {
  90. setValue("furSpeed", value);
  91. }, function() {
  92. return fur.furSpeed;
  93. });
  94. // Fur spacing
  95. registerRangeUI("fur", "Fur Spacing", 0, 20, function(value) {
  96. setValue("furSpacing", value);
  97. }, function() {
  98. return fur.furSpacing;
  99. });
  100. // Fur Occlusion
  101. registerRangeUI("fur", "Fur Occlusion", 0, 2, function (value) {
  102. setValue("furOcclusion", value);
  103. }, function () {
  104. return fur.furOcclusion;
  105. });
  106. return {
  107. material: fur,
  108. resetFur: function() {
  109. resetFur();
  110. },
  111. configureFur: function(mesh) {
  112. configureFur(mesh);
  113. }
  114. };
  115. };