1 // exponent.h 2 // 3 // Copyright (C) 2003, 2004 Jason Bevins 4 // 5 // This library is free software; you can redistribute it and/or modify it 6 // under the terms of the GNU Lesser General Public License as published by 7 // the Free Software Foundation; either version 2.1 of the License, or (at 8 // your option) any later version. 9 // 10 // This library is distributed in the hope that it will be useful, but WITHOUT 11 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 13 // License (COPYING.txt) for more details. 14 // 15 // You should have received a copy of the GNU Lesser General Public License 16 // along with this library; if not, write to the Free Software Foundation, 17 // Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 // 19 // The developer's email is jlbezigvins@gmzigail.com (for great email, take 20 // off every 'zig'.) 21 // 22 module noise.mod.exponent; 23 24 private { 25 import noise.mod.modulebase; 26 } 27 28 /// @addtogroup libnoise 29 /// @{ 30 31 /// @addtogroup modules 32 /// @{ 33 34 /// @addtogroup modifiermodules 35 /// @{ 36 37 /// Default exponent for the module::Exponent noise module. 38 const double DEFAULT_EXPONENT = 1.0; 39 40 /// Noise module that maps the output value from a source module onto an 41 /// exponential curve. 42 /// 43 /// @image html moduleexponent.png 44 /// 45 /// Because most noise modules will output values that range from -1.0 to 46 /// +1.0, this noise module first normalizes this output value (the range 47 /// becomes 0.0 to 1.0), maps that value onto an exponential curve, then 48 /// rescales that value back to the original range. 49 /// 50 /// This noise module requires one source module. 51 class Exponent : Mod 52 { 53 54 public: 55 56 /// Constructor. 57 /// 58 /// The default exponent is set to module::DEFAULT_EXPONENT. 59 this () 60 { 61 super(GetSourceModCount ()); 62 m_exponent = DEFAULT_EXPONENT; 63 } 64 65 /// Returns the exponent value to apply to the output value from the 66 /// source module. 67 /// 68 /// @returns The exponent value. 69 /// 70 /// Because most noise modules will output values that range from -1.0 71 /// to +1.0, this noise module first normalizes this output value (the 72 /// range becomes 0.0 to 1.0), maps that value onto an exponential 73 /// curve, then rescales that value back to the original range. 74 double GetExponent () const 75 { 76 return m_exponent; 77 } 78 79 override int GetSourceModCount () const 80 { 81 return 1; 82 } 83 84 override double GetValue (double x, double y, double z) const 85 { 86 assert (m_pSourceMod[0] !is null); 87 88 double value = m_pSourceMod[0].GetValue (x, y, z); 89 return (pow (fabs ((value + 1.0) / 2.0), m_exponent) * 2.0 - 1.0); 90 } 91 92 /// Sets the exponent value to apply to the output value from the 93 /// source module. 94 /// 95 /// @param exponent The exponent value. 96 /// 97 /// Because most noise modules will output values that range from -1.0 98 /// to +1.0, this noise module first normalizes this output value (the 99 /// range becomes 0.0 to 1.0), maps that value onto an exponential 100 /// curve, then rescales that value back to the original range. 101 void SetExponent (double exponent) 102 { 103 m_exponent = exponent; 104 } 105 106 protected: 107 108 /// Exponent to apply to the output value from the source module. 109 double m_exponent; 110 111 }; 112 113 /// @} 114 115 /// @} 116 117 /// @}