hgecolor.cpp
上传用户:jnfxsk
上传日期:2022-06-16
资源大小:3675k
文件大小:2k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. /*
  2. ** Haaf's Game Engine 1.7
  3. ** Copyright (C) 2003-2007, Relish Games
  4. ** hge.relishgames.com
  5. **
  6. ** hgeColor*** helper classes implementation
  7. */
  8. #include "....includehgecolor.h"
  9. #include <math.h>
  10. void hgeColorHSV::SetHWColor(DWORD col)
  11. {
  12. float r, g, b;
  13. float minv, maxv, delta;
  14. float del_R, del_G, del_B;
  15. a = (col>>24) / 255.0f;
  16. r = ((col>>16) & 0xFF) / 255.0f;
  17. g = ((col>>8)  & 0xFF) / 255.0f;
  18. b = (col       & 0xFF) / 255.0f;
  19. minv = min(min(r, g), b);
  20. maxv = max(max(r, g), b);
  21. delta = maxv - minv;
  22. v = maxv;
  23. if (delta == 0)
  24. {
  25. h = 0;
  26. s = 0;
  27. }
  28. else
  29. {
  30. s = delta / maxv;
  31. del_R = (((maxv - r) / 6) + (delta / 2)) / delta;
  32. del_G = (((maxv - g) / 6) + (delta / 2)) / delta;
  33. del_B = (((maxv - b) / 6) + (delta / 2)) / delta;
  34. if      (r == maxv) {h = del_B - del_G;}
  35. else if (g == maxv) {h = (1.0f / 3.0f) + del_R - del_B;}
  36. else if (b == maxv) {h = (2.0f / 3.0f) + del_G - del_R;}
  37. if (h < 0) h += 1;
  38. if (h > 1) h -= 1;
  39. }
  40. }
  41. DWORD hgeColorHSV::GetHWColor() const
  42. {
  43. float r, g, b;
  44. float xh, i, p1, p2, p3;
  45. if (s == 0)
  46. {
  47. r = v;
  48. g = v;
  49. b = v;
  50. }
  51. else
  52. {
  53. xh = h * 6;
  54. if(xh == 6) xh=0;
  55. i = floorf(xh);
  56. p1 = v * (1 - s);
  57. p2 = v * (1 - s * (xh - i));
  58. p3 = v * (1 - s * (1 - (xh - i)));
  59. if      (i == 0) {r = v;  g = p3; b = p1;}
  60. else if (i == 1) {r = p2; g = v;  b = p1;}
  61. else if (i == 2) {r = p1; g = v;  b = p3;}
  62. else if (i == 3) {r = p1; g = p2; b = v; }
  63. else if (i == 4) {r = p3; g = p1; b = v; }
  64. else  {r = v;  g = p1; b = p2;}
  65. }
  66. return (DWORD(a*255.0f)<<24) + (DWORD(r*255.0f)<<16) + (DWORD(g*255.0f)<<8) + DWORD(b*255.0f);
  67. }