addfur.js 3.8 KB

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