1 // checkerboard.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.checkerboard;
23 
24 private {
25     import noise.mod.modulebase;
26 }
27 
28 /// @addtogroup libnoise
29 /// @{
30 
31 /// @addtogroup modules
32 /// @{
33 
34 /// @addtogroup generatormodules
35 /// @{
36 
37 /// Noise module that outputs a checkerboard pattern.
38 ///
39 /// @image html modulecheckerboard.png
40 ///
41 /// This noise module outputs unit-sized blocks of alternating values.
42 /// The values of these blocks alternate between -1.0 and +1.0.
43 ///
44 /// This noise module is not really useful by itself, but it is often used
45 /// for debugging purposes.
46 ///
47 /// This noise module does not require any source modules.
48 class Checkerboard: Mod
49 {
50 
51   public:
52 
53     /// Constructor.
54     this ()
55     {
56         super(this.GetSourceModCount());
57     }
58 
59     override int GetSourceModCount () const
60     {
61         return 0;
62     }
63 
64     override double GetValue (double x, double y, double z) const
65     {
66       int ix = cast(int)(floor (MakeInt32Range (x)));
67       int iy = cast(int)(floor (MakeInt32Range (y)));
68       int iz = cast(int)(floor (MakeInt32Range (z)));
69       return (ix & 1 ^ iy & 1 ^ iz & 1)? -1.0: 1.0;
70     }
71 
72 };
73 
74 /// @}
75 
76 /// @}
77 
78 /// @}