Water Material.cpp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. /******************************************************************************/
  2. #include "stdafx.h"
  3. /******************************************************************************/
  4. /******************************************************************************/
  5. EditWaterMtrl::EditWaterMtrl() : density(0.3f), density_add(0.45f), density_underwater(0.02f), density_underwater_add(0.6f), scale_color(200), scale_normal(10), scale_bump(100), reflect_world(0.18f), refract(0.10f), refract_reflection(0.06f), refract_underwater(0.01f), wave_scale(0.25f), fresnel_pow(5.5f), fresnel_rough(4), fresnel_color(0.10f, 0.10f, 0.10f), color_underwater0(0.26f, 0.35f, 0.42f), color_underwater1(0.10f, 0.20f, 0.30f) {::EditMaterial::color.set(0.42f, 0.50f, 0.58f, 1); ::EditMaterial::rough=1; ::EditMaterial::specular=1.5f; ::EditMaterial::reflection=0.1f;}
  6. bool EditWaterMtrl::usesTexBump()C {return wave_scale>EPSL && hasBumpMap();}
  7. bool EditWaterMtrl::equal(C EditWaterMtrl &src)C
  8. {
  9. return ::EditMaterial::equal(src) && density_time==src.density_time && density_underwater_time==src.density_underwater_time && scale_color_time==src.scale_color_time && scale_normal_time==src.scale_normal_time && scale_bump_time==src.scale_bump_time
  10. && reflect_world_time==src.reflect_world_time && refract_time==src.refract_time && refract_reflection_time==src.refract_reflection_time && refract_underwater_time==src.refract_underwater_time && wave_scale_time==src.wave_scale_time
  11. && fresnel_pow_time==src.fresnel_pow_time && fresnel_rough_time==src.fresnel_rough_time && fresnel_color_time==src.fresnel_color_time && color_underwater_time==src.color_underwater_time;
  12. }
  13. bool EditWaterMtrl::newer(C EditWaterMtrl &src)C
  14. {
  15. return ::EditMaterial::newer(src) || density_time>src.density_time || density_underwater_time>src.density_underwater_time || scale_color_time>src.scale_color_time || scale_normal_time>src.scale_normal_time || scale_bump_time>src.scale_bump_time
  16. || reflect_world_time>src.reflect_world_time || refract_time>src.refract_time || refract_reflection_time>src.refract_reflection_time || refract_underwater_time>src.refract_underwater_time || wave_scale_time>src.wave_scale_time
  17. || fresnel_pow_time>src.fresnel_pow_time || fresnel_rough_time>src.fresnel_rough_time || fresnel_color_time>src.fresnel_color_time || color_underwater_time>src.color_underwater_time;
  18. }
  19. void EditWaterMtrl::reset() {T=EditWaterMtrl();}
  20. void EditWaterMtrl::newData()
  21. {
  22. ::EditMaterial::newData();
  23. density_time++; density_underwater_time++; scale_color_time++; scale_normal_time++; scale_bump_time++;
  24. reflect_world_time++; refract_time++; refract_reflection_time++; refract_underwater_time++; wave_scale_time++;
  25. fresnel_pow_time++; fresnel_rough_time++; fresnel_color_time++; color_underwater_time++;
  26. }
  27. void EditWaterMtrl::create(C WaterMtrl &src, C TimeStamp &time)
  28. {
  29. ::EditMaterial::create(Material(), time); // call super to setup times for all values
  30. density =src.density;
  31. density_add =src.density_add; density_time=time;
  32. density_underwater =src.density_underwater;
  33. density_underwater_add=src.density_underwater_add; density_underwater_time=time;
  34. scale_color =src.scale_color; scale_color_time=time;
  35. scale_normal =src.scale_normal; scale_normal_time=time;
  36. scale_bump =src.scale_bump; scale_bump_time=time;
  37. ::EditMaterial::rough =src.rough; rough_bump_time=time;
  38. ::EditMaterial::reflection =src.reflect_tex; reflection_time=time;
  39. reflect_world =src.reflect_world; reflect_world_time=time;
  40. refract =src.refract; refract_time=time;
  41. refract_reflection =src.refract_reflection; refract_reflection_time=time;
  42. refract_underwater =src.refract_underwater; refract_underwater_time=time;
  43. ::EditMaterial::specular =src.specular; spec_time=time;
  44. wave_scale =src.wave_scale; wave_scale_time=time;
  45. fresnel_pow =src.fresnel_pow; fresnel_pow_time=time;
  46. fresnel_rough =src.fresnel_rough; fresnel_rough_time=time;
  47. fresnel_color =src.fresnel_color; fresnel_color_time=time;
  48. ::EditMaterial::color =Vec4(src.color, 1); color_time=time;
  49. color_underwater0 =src.color_underwater0; color_underwater_time=time;
  50. color_underwater1 =src.color_underwater1;
  51. base_0_tex=src. colorMap().id();
  52. base_1_tex=src. normalMap().id();
  53. reflection_tex=src.reflectionMap().id();
  54. }
  55. void EditWaterMtrl::copyTo(WaterMtrl &dest, C Project &proj)C
  56. {
  57. dest.density =density ;
  58. dest.density_add =density_add ;
  59. dest.density_underwater =density_underwater ;
  60. dest.density_underwater_add=density_underwater_add;
  61. dest.scale_color =scale_color ;
  62. dest.scale_normal =scale_normal ;
  63. dest.scale_bump =scale_bump ;
  64. dest.rough =::EditMaterial::rough ;
  65. dest.reflect_tex =::EditMaterial::reflection ;
  66. dest.reflect_world =reflect_world ;
  67. dest.refract =refract ;
  68. dest.refract_reflection =refract_reflection ;
  69. dest.refract_underwater =refract_underwater ;
  70. dest.specular =::EditMaterial::specular ;
  71. dest.wave_scale =wave_scale ;
  72. dest.fresnel_pow =fresnel_pow ;
  73. dest.fresnel_rough =fresnel_rough ;
  74. dest.fresnel_color =fresnel_color ;
  75. dest.color =::EditMaterial::color.xyz ;
  76. dest.color_underwater0 =color_underwater0 ;
  77. dest.color_underwater1 =color_underwater1 ;
  78. dest. colorMap(proj.texPath( base_0_tex))
  79. . normalMap(proj.texPath( base_1_tex))
  80. .reflectionMap(proj.texPath(reflection_tex));
  81. dest.validate();
  82. }
  83. uint EditWaterMtrl::sync(C EditWaterMtrl &src)
  84. {
  85. uint changed=::EditMaterial::sync(src);
  86. if(Sync(density_time, src.density_time))
  87. {
  88. changed|=CHANGED_PARAM;
  89. density =src.density;
  90. density_add=src.density_add;
  91. }
  92. if(Sync(density_underwater_time, src.density_underwater_time))
  93. {
  94. changed|=CHANGED_PARAM;
  95. density_underwater =src.density_underwater;
  96. density_underwater_add =src.density_underwater_add;
  97. }
  98. changed|=Sync(scale_color_time , src.scale_color_time , scale_color , src.scale_color )*CHANGED_PARAM;
  99. changed|=Sync(scale_normal_time , src.scale_normal_time , scale_normal , src.scale_normal )*CHANGED_PARAM;
  100. changed|=Sync(scale_bump_time , src.scale_bump_time , scale_bump , src.scale_bump )*CHANGED_PARAM;
  101. changed|=Sync(reflect_world_time , src.reflect_world_time , reflect_world , src.reflect_world )*CHANGED_PARAM;
  102. changed|=Sync(refract_time , src.refract_time , refract , src.refract )*CHANGED_PARAM;
  103. changed|=Sync(refract_reflection_time, src.refract_reflection_time, refract_reflection, src.refract_reflection)*CHANGED_PARAM;
  104. changed|=Sync(refract_underwater_time, src.refract_underwater_time, refract_underwater, src.refract_underwater)*CHANGED_PARAM;
  105. changed|=Sync(wave_scale_time , src.wave_scale_time , wave_scale , src.wave_scale )*CHANGED_PARAM;
  106. changed|=Sync(fresnel_pow_time , src.fresnel_pow_time , fresnel_pow , src.fresnel_pow )*CHANGED_PARAM;
  107. changed|=Sync(fresnel_rough_time , src.fresnel_rough_time , fresnel_rough , src.fresnel_rough )*CHANGED_PARAM;
  108. changed|=Sync(fresnel_color_time , src.fresnel_color_time , fresnel_color , src.fresnel_color )*CHANGED_PARAM;
  109. if(Sync(color_underwater_time, src.color_underwater_time))
  110. {
  111. changed|=CHANGED_PARAM;
  112. color_underwater0=src.color_underwater0;
  113. color_underwater1=src.color_underwater1;
  114. }
  115. return changed;
  116. }
  117. uint EditWaterMtrl::undo(C EditWaterMtrl &src)
  118. {
  119. uint changed=::EditMaterial::undo(src);
  120. if(Undo(density_time, src.density_time))
  121. {
  122. changed|=CHANGED_PARAM;
  123. density =src.density;
  124. density_add=src.density_add;
  125. }
  126. if(Undo(density_underwater_time, src.density_underwater_time))
  127. {
  128. changed|=CHANGED_PARAM;
  129. density_underwater =src.density_underwater;
  130. density_underwater_add =src.density_underwater_add;
  131. }
  132. changed|=Undo(scale_color_time , src.scale_color_time , scale_color , src.scale_color )*CHANGED_PARAM;
  133. changed|=Undo(scale_normal_time , src.scale_normal_time , scale_normal , src.scale_normal )*CHANGED_PARAM;
  134. changed|=Undo(scale_bump_time , src.scale_bump_time , scale_bump , src.scale_bump )*CHANGED_PARAM;
  135. changed|=Undo(reflect_world_time , src.reflect_world_time , reflect_world , src.reflect_world )*CHANGED_PARAM;
  136. changed|=Undo(refract_time , src.refract_time , refract , src.refract )*CHANGED_PARAM;
  137. changed|=Undo(refract_reflection_time, src.refract_reflection_time, refract_reflection, src.refract_reflection)*CHANGED_PARAM;
  138. changed|=Undo(refract_underwater_time, src.refract_underwater_time, refract_underwater, src.refract_underwater)*CHANGED_PARAM;
  139. changed|=Undo(wave_scale_time , src.wave_scale_time , wave_scale , src.wave_scale )*CHANGED_PARAM;
  140. changed|=Undo(fresnel_pow_time , src.fresnel_pow_time , fresnel_pow , src.fresnel_pow )*CHANGED_PARAM;
  141. changed|=Undo(fresnel_rough_time , src.fresnel_rough_time , fresnel_rough , src.fresnel_rough )*CHANGED_PARAM;
  142. changed|=Undo(fresnel_color_time , src.fresnel_color_time , fresnel_color , src.fresnel_color )*CHANGED_PARAM;
  143. if(Undo(color_underwater_time, src.color_underwater_time))
  144. {
  145. changed|=CHANGED_PARAM;
  146. color_underwater0=src.color_underwater0;
  147. color_underwater1=src.color_underwater1;
  148. }
  149. return changed;
  150. }
  151. bool EditWaterMtrl::save(File &f)C
  152. {
  153. f.cmpUIntV(1);
  154. ::EditMaterial::save(f);
  155. f<<density<<density_add<<density_underwater<<density_underwater_add<<scale_color<<scale_normal<<scale_bump
  156. <<reflect_world<<refract<<refract_reflection<<refract_underwater<<wave_scale
  157. <<fresnel_pow<<fresnel_rough<<fresnel_color<<color_underwater0<<color_underwater1
  158. <<density_time<<density_underwater_time<<scale_color_time<<scale_normal_time<<scale_bump_time
  159. <<reflect_world_time<<refract_time<<refract_reflection_time<<refract_underwater_time<<wave_scale_time
  160. <<fresnel_pow_time<<fresnel_rough_time<<fresnel_color_time<<color_underwater_time;
  161. return f.ok();
  162. }
  163. bool EditWaterMtrl::load(File &f)
  164. {
  165. switch(f.decUIntV())
  166. {
  167. case 1: if(::EditMaterial::load(f))
  168. {
  169. f>>density>>density_add>>density_underwater>>density_underwater_add>>scale_color>>scale_normal>>scale_bump
  170. >>reflect_world>>refract>>refract_reflection>>refract_underwater>>wave_scale
  171. >>fresnel_pow>>fresnel_rough>>fresnel_color>>color_underwater0>>color_underwater1
  172. >>density_time>>density_underwater_time>>scale_color_time>>scale_normal_time>>scale_bump_time
  173. >>reflect_world_time>>refract_time>>refract_reflection_time>>refract_underwater_time>>wave_scale_time
  174. >>fresnel_pow_time>>fresnel_rough_time>>fresnel_color_time>>color_underwater_time;
  175. if(f.ok())return true;
  176. }break;
  177. case 0: reset(); return f.ok(); // empty
  178. }
  179. reset(); return false;
  180. }
  181. bool EditWaterMtrl::load(C Str &name)
  182. {
  183. File f; if(f.readTry(name))return load(f);
  184. reset(); return false;
  185. }
  186. /******************************************************************************/