Project

General

Profile

Download (5.79 KB) Statistics
| Branch: | Revision:

library / src / main / java / org / distorted / library / DistortedCubes.java @ 3d590d8d

1 d333eb6b Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2016 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Distorted.                                                               //
5
//                                                                                               //
6
// Distorted is free software: you can redistribute it and/or modify                             //
7
// it under the terms of the GNU General Public License as published by                          //
8
// the Free Software Foundation, either version 2 of the License, or                             //
9
// (at your option) any later version.                                                           //
10
//                                                                                               //
11
// Distorted is distributed in the hope that it will be useful,                                  //
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
14
// GNU General Public License for more details.                                                  //
15
//                                                                                               //
16
// You should have received a copy of the GNU General Public License                             //
17
// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
18
///////////////////////////////////////////////////////////////////////////////////////////////////
19
20 6a06a912 Leszek Koltunski
package org.distorted.library;
21
22
///////////////////////////////////////////////////////////////////////////////////////////////////
23
/**
24 9361b337 Leszek Koltunski
 * Instance of this class represents a flat set of cubes optionally textured as a whole.
25 6a06a912 Leszek Koltunski
 * (a subset of a NxMx1 cuboid build with 1x1x1 cubes, i.e. the MxNx1 cuboid with arbitrary cubes missing)
26
 * <p>
27
 * General idea is as follows:
28
 * <ul>
29
 * <li> Create an instance of this class
30
 * <li> Optionally texture it
31
 * <li> Apply some effects
32
 * <li> Draw it!
33
 * </ul>
34
 * <p>
35
 * The effects we can apply fall into three general categories:
36
 * <ul>
37
 * <li> Matrix Effects, i.e. ones that change the Cuboid's ModelView Matrix (moves, scales, rotations)
38
 * <li> Vertex Effects, i.e. effects that are implemented in the Vertex Shader. Those typically change
39
 *      the shape of (some sub-Region of) the Cuboid in some way (deforms, distortions, sinks)
40
 * <li> Fragment Effects, i.e. effects that change (some of) the pixels of the Texture (transparency, macroblock)
41
 * </ul>
42
 * <p>
43
 * 
44
 */
45
public class DistortedCubes extends DistortedObject
46
   {
47
   
48
///////////////////////////////////////////////////////////////////////////////////////////////////
49
// PUBLIC API
50 9361b337 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
51 6a06a912 Leszek Koltunski
/**
52
 * Creates internal memory representation of a cuboid subset.
53 9361b337 Leszek Koltunski
 *
54 6a06a912 Leszek Koltunski
 * @param cols Integer helping to parse the next parameter.
55
 * @param desc String describing the subset of a MxNx1 cuboid that we want to create.
56
 *             Its MxN characters - all 0 or 1 - decide of appropriate field is taken or not.
57 688662ef Leszek Koltunski
 *      <p></p>
58
 *      <p>
59
 *      <pre>
60
 *      For example, (cols=2, desc="111010") describes the following shape:
61 9361b337 Leszek Koltunski
 *
62 688662ef Leszek Koltunski
 *      XX
63
 *      X
64
 *      X
65 9361b337 Leszek Koltunski
 *
66 688662ef Leszek Koltunski
 *      whereas (cols=2,desc="110001") describes
67 9361b337 Leszek Koltunski
 *
68 688662ef Leszek Koltunski
 *      XX
69 9361b337 Leszek Koltunski
 *
70 688662ef Leszek Koltunski
 *       X
71
 *      </pre>
72
 *      </p>
73 ffbf279e Leszek Koltunski
 * @param cubeSize size, in pixels, of the single 1x1x1 cube our cuboid is built from
74 6a06a912 Leszek Koltunski
 * @param frontOnly Only create the front wall or side and back as well?
75
 */
76 ffbf279e Leszek Koltunski
 public DistortedCubes(int cols, String desc, int cubeSize, boolean frontOnly)
77 9361b337 Leszek Koltunski
   {
78
   int Rs = 0;
79
   int Cs = 0;
80 6a06a912 Leszek Koltunski
     
81 9361b337 Leszek Koltunski
   if( cols>0 )
82
     {
83
     int reallen = desc.length();
84
     int len = reallen;
85 6a06a912 Leszek Koltunski
86 9361b337 Leszek Koltunski
     if( (reallen/cols)*cols != reallen )
87
       {
88
       len = ((reallen/cols)+1)*cols;
89
       for(int i=reallen; i<len; i++) desc += "0";
90
       }
91 6a06a912 Leszek Koltunski
    
92 ada90d33 Leszek Koltunski
     if( desc.contains("1") )
93 9361b337 Leszek Koltunski
       {
94
       Cs = cols;
95
       Rs = len/cols;
96 6a06a912 Leszek Koltunski
       }
97
     }
98 9361b337 Leszek Koltunski
     
99 0729bc41 Leszek Koltunski
   mGrid = DistortedGridFactory.getGrid(cols,desc, frontOnly);
100 3d590d8d Leszek Koltunski
   initializeData(cubeSize*Cs,cubeSize*Rs,frontOnly ? 1 : cubeSize);
101 9361b337 Leszek Koltunski
   }
102
103 665e2c45 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
104
/**
105
 * Creates internal memory representation of a full, hole-less cuboid subset.
106
 *
107
 * @param cols Number of columns
108
 * @param rows Number of rows
109
 * @param cubeSize size, in pixels, of the single 1x1x1 cube our cuboid is built from
110
 * @param frontOnly Only create the front wall or side and back as well?
111
 */
112
 public DistortedCubes(int cols, int rows, int cubeSize, boolean frontOnly)
113
   {
114
   mGrid = DistortedGridFactory.getGrid(cols,rows, frontOnly);
115 3d590d8d Leszek Koltunski
   initializeData(cubeSize*cols,cubeSize*rows,frontOnly ? 1 : cubeSize);
116 665e2c45 Leszek Koltunski
   }
117
118 9361b337 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
119
/**
120 350cc2f5 Leszek Koltunski
 * Convenience constructor.
121 9361b337 Leszek Koltunski
 */
122
 public DistortedCubes(int cols, String desc, int gridSize)
123
   {
124
   this(cols,desc,gridSize,false);
125
   }
126
127 6a06a912 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
128
/**
129 8298e6af Leszek Koltunski
 * Copy constructor.
130
 *
131
 * @param dc Object to copy
132 b911dc09 Leszek Koltunski
 * @param flags see {@link DistortedObject#DistortedObject(DistortedObject,int)}
133 6a06a912 Leszek Koltunski
 */
134 9361b337 Leszek Koltunski
 public DistortedCubes(DistortedCubes dc, int flags)
135
   {
136
   super(dc,flags);
137
   }
138 6a06a912 Leszek Koltunski
139 ada90d33 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
140
141 0729bc41 Leszek Koltunski
 protected DistortedObject deepCopy(int flags)
142
   {
143
   return new DistortedCubes(this,flags);
144
   }
145 ada90d33 Leszek Koltunski
146 6a06a912 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////   
147 9361b337 Leszek Koltunski
 }