home *** CD-ROM | disk | FTP | other *** search
/ Hackers Magazine 57 / CdHackersMagazineNr57.iso / Software / Multimedia / k3d-setup-0.7.11.0.exe / include / k3d / k3dsdk / noise.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-11-07  |  2.4 KB  |  91 lines

  1. #ifndef K3DSDK_NOISE_H
  2. #define K3DSDK_NOISE_H
  3.  
  4. // K-3D
  5. // Copyright (c) 1995-2004, Timothy M. Shead
  6. //
  7. // Contact: tshead@k-3d.com
  8. //
  9. // This library is free software; you can redistribute it and/or
  10. // modify it under the terms of the GNU General Public
  11. // License as published by the Free Software Foundation; either
  12. // version 2 of the License, or (at your option) any later version.
  13. //
  14. // This library is distributed in the hope that it will be useful,
  15. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  17. // General Public License for more details.
  18. //
  19. // You should have received a copy of the GNU General Public
  20. // License along with this library; if not, write to the Free Software
  21. // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  22.  
  23. /** \file
  24.         \brief Functions by Ken Perlin, from "Texturing and Modeling - A Procedural Approach"
  25.         \author Tim Shead (tshead@k-3d.com)
  26. */
  27.  
  28. #include "color.h"
  29. #include "point3.h"
  30.  
  31. namespace k3d
  32. {
  33.  
  34. template<typename T>
  35. const T noise(const double U);
  36. template<typename T>
  37. const T noise(const double U, const double V);
  38. template<typename T>
  39. const T noise(const point3& Pt);
  40.  
  41. const double noise(const double U);
  42. const double noise(const double U, const double V);
  43. const double noise(const point3& Pt);
  44.  
  45. template<>
  46. inline const point3 noise(const double U)
  47. {
  48.     return point3(noise(U + 0.34), noise(U + 0.011), noise(U + 0.34));
  49. }
  50.  
  51. template<>
  52. inline const point3 noise(const double U, const double V)
  53. {
  54.     return point3(noise(U + 0.34, V + 0.66), noise(U + 0.011, V + 0.845), noise(U + 0.34, V + 0.12));
  55. }
  56.  
  57. template<>
  58. inline const point3 noise(const point3& Pt)
  59. {
  60.     return point3(
  61.         noise(point3(Pt[0] + 0.34, Pt[1] + 0.66, Pt[2] + 0.237)),
  62.         noise(point3(Pt[0] + 0.011, Pt[1] + 0.845, Pt[2] + 0.037)),
  63.         noise(point3(Pt[0] + 0.34, Pt[1] + 0.12, Pt[2] + 0.9)));
  64. }
  65.  
  66. template<>
  67. inline const color noise(const double U)
  68. {
  69.     return color(noise(U + 0.34), noise(U + 0.011), noise(U + 0.34));
  70. }
  71.  
  72. template<>
  73. inline const color noise(const double U, const double V)
  74. {
  75.     return color(noise(U + 0.34, V + 0.66), noise(U + 0.011, V + 0.845), noise(U + 0.34, V + 0.12));
  76. }
  77.  
  78. template<>
  79. inline const color noise(const point3& Pt)
  80. {
  81.     return color(
  82.         noise(point3(Pt[0] + 0.34, Pt[1] + 0.66, Pt[2] + 0.237)),
  83.         noise(point3(Pt[0] + 0.011, Pt[1] + 0.845, Pt[2] + 0.037)),
  84.         noise(point3(Pt[0] + 0.34, Pt[1] + 0.12, Pt[2] + 0.9)));
  85. }
  86.  
  87. } // namespace k3d
  88.  
  89. #endif // !K3DSDK_NOISE_H
  90.  
  91.