Revision 350cc2f5
Added by Leszek Koltunski about 8 years ago
src/main/java/org/distorted/library/Distorted.java | ||
---|---|---|
85 | 85 |
private static final String TAG = Distorted.class.getSimpleName(); |
86 | 86 |
private static boolean mInitialized = false; |
87 | 87 |
|
88 |
static int mPositionH; // pass in model position information |
|
89 |
static int mTextureUniformH;// pass in the texture. |
|
90 |
static int mNormalH; // pass in model normal information. |
|
91 |
static int mTextureCoordH; // pass in model texture coordinate information. |
|
92 |
static int mProgramH; // This is a handle to our shading program.
|
|
88 |
static int mPositionH; // pass in model position information
|
|
89 |
static int mTextureUniformH; // pass in the texture.
|
|
90 |
static int mNormalH; // pass in model normal information.
|
|
91 |
static int mTextureCoordH; // pass in model texture coordinate information.
|
|
92 |
static int mProgramH; // This is a handle to our shading program.
|
|
93 | 93 |
|
94 | 94 |
static DistortedProjection mProjection = new DistortedProjection(); |
95 | 95 |
static float mFOV = 60.0f; |
src/main/java/org/distorted/library/DistortedBitmap.java | ||
---|---|---|
104 | 104 |
* Copy constructor. |
105 | 105 |
* |
106 | 106 |
* @param db Object to copy |
107 |
* @param flags {@see DistortedObject#DistortedObject(DistortedObject,int)} |
|
107 |
* @param flags see {@see DistortedObject#DistortedObject(DistortedObject,int)}
|
|
108 | 108 |
*/ |
109 | 109 |
public DistortedBitmap(DistortedBitmap db, int flags) |
110 | 110 |
{ |
src/main/java/org/distorted/library/DistortedCubes.java | ||
---|---|---|
102 | 102 |
|
103 | 103 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
104 | 104 |
/** |
105 |
* Convenience constructor |
|
105 |
* Convenience constructor.
|
|
106 | 106 |
*/ |
107 | 107 |
public DistortedCubes(int cols, String desc, int gridSize) |
108 | 108 |
{ |
... | ... | |
114 | 114 |
* Copy constructor. |
115 | 115 |
* |
116 | 116 |
* @param dc Object to copy |
117 |
* @param flags {@see DistortedObject#DistortedObject(DistortedObject,int)} |
|
117 |
* @param flags see {@see DistortedObject#DistortedObject(DistortedObject,int)}
|
|
118 | 118 |
*/ |
119 | 119 |
public DistortedCubes(DistortedCubes dc, int flags) |
120 | 120 |
{ |
src/main/java/org/distorted/library/DistortedObject.java | ||
---|---|---|
29 | 29 |
import org.distorted.library.type.Data2D; |
30 | 30 |
import org.distorted.library.type.Data3D; |
31 | 31 |
import org.distorted.library.type.Data4D; |
32 |
import org.distorted.library.type.Data5D; |
|
32 | 33 |
import org.distorted.library.type.Static3D; |
33 | 34 |
|
34 | 35 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
816 | 817 |
/** |
817 | 818 |
* Directional, sinusoidal wave effect. |
818 | 819 |
* |
819 |
* @param wave A 4-dimensional data structure describing the wave: first member is the amplitude, |
|
820 |
* second is the wave length, and the next two describe the 'direction' of the wave. |
|
820 |
* @param wave A 5-dimensional data structure describing the wave: first member is the amplitude, |
|
821 |
* second is the wave length, third is the offset (i.e. when offset = PI/2, the sine |
|
822 |
* wave at the center does not start from sin(0), but from sin(PI/2) ) and the next two |
|
823 |
* describe the 'direction' of the wave. |
|
821 | 824 |
* Wave direction is defined to be a 3D vector of length 1. To define such vectors, we |
822 | 825 |
* need 2 floats: thus the third member is the angle Alpha (in degrees) which the vector |
823 | 826 |
* forms with the XY-plane, and the fourth is the angle Beta (again in degrees) which |
... | ... | |
830 | 833 |
* but this time it waves in the Y-direction, i.e. cross sections of the surface and the |
831 | 834 |
* YZ-plane with be sine shapes. |
832 | 835 |
* Example3: if Alpha = 0 and Beta = 45, then V=(sqrt(2)/2, -sqrt(2)/2, 0) and the wave |
833 |
* is entirely 'horizontal' and moves point (x,y,0) in direction V. |
|
836 |
* is entirely 'horizontal' and moves point (x,y,0) in direction V by whatever is the |
|
837 |
* value if sin at this point. |
|
834 | 838 |
* @param center 2-dimensional Data that, at any given time, returns the Center of the Effect. |
835 | 839 |
* @return ID of the effect added, or -1 if we failed to add one. |
836 | 840 |
*/ |
837 |
public long wave(Data4D wave, Data2D center)
|
|
841 |
public long wave(Data5D wave, Data2D center)
|
|
838 | 842 |
{ |
839 | 843 |
return mV.add(EffectNames.WAVE, wave, center, null); |
840 | 844 |
} |
... | ... | |
843 | 847 |
/** |
844 | 848 |
* Directional, sinusoidal wave effect. |
845 | 849 |
* |
846 |
* @param wave A 4-dimensional data structure describing the wave: first member is the amplitude, |
|
847 |
* second is the wave length, and the next two describe the 'direction' of the wave. |
|
848 |
* Wave direction is defined to be a 3D vector of length 1. To define such vectors, we |
|
849 |
* need 2 floats: thus the third member is the angle Alpha (in degrees) which the vector |
|
850 |
* forms with the XY-plane, and the fourth is the angle Beta (again in degrees) which |
|
851 |
* the projection of the vector to the XY-plane forms with the Y-axis (counterclockwise). |
|
852 |
* |
|
853 |
* Example1: if Alpha = 90, Beta = 90, (then V=(0,0,1) ) and the wave acts 'vertically' |
|
854 |
* in the X-direction, i.e. cross-sections of the resulting surface with the XZ-plane |
|
855 |
* will be sine shapes. |
|
856 |
* Example2: if Alpha = 90, Beta = 0, the again V=(0,0,1) and the wave is 'vertical', |
|
857 |
* but this time it waves in the Y-direction, i.e. cross sections of the surface and the |
|
858 |
* YZ-plane with be sine shapes. |
|
859 |
* Example3: if Alpha = 0 and Beta = 45, then V=(sqrt(2)/2, -sqrt(2)/2, 0) and the wave |
|
860 |
* is entirely 'horizontal' and moves point (x,y,0) in direction V. |
|
861 |
* @param center 2-dimensional Data that, at any given time, returns the Center of the Effect. |
|
850 |
* @param wave see {@see wave(Data5D,Data2D)} |
|
851 |
* @param center see {@see wave(Data5D,Data2D)} |
|
862 | 852 |
* @param region Region that masks the Effect. |
863 | 853 |
* @return ID of the effect added, or -1 if we failed to add one. |
864 | 854 |
*/ |
865 |
public long wave(Data4D wave, Data2D center, Data4D region)
|
|
855 |
public long wave(Data5D wave, Data2D center, Data4D region)
|
|
866 | 856 |
{ |
867 | 857 |
return mV.add(EffectNames.WAVE, wave, center, region); |
868 | 858 |
} |
src/main/java/org/distorted/library/EffectQueueFragment.java | ||
---|---|---|
44 | 44 |
|
45 | 45 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
46 | 46 |
|
47 |
public EffectQueueFragment(DistortedObject obj)
|
|
47 |
EffectQueueFragment(DistortedObject obj) |
|
48 | 48 |
{ |
49 | 49 |
super(obj,NUM_UNIFORMS,INDEX); |
50 | 50 |
} |
src/main/java/org/distorted/library/EffectQueueMatrix.java | ||
---|---|---|
50 | 50 |
|
51 | 51 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
52 | 52 |
|
53 |
public EffectQueueMatrix(DistortedObject obj)
|
|
53 |
EffectQueueMatrix(DistortedObject obj) |
|
54 | 54 |
{ |
55 | 55 |
super(obj,NUM_UNIFORMS, INDEX ); |
56 | 56 |
} |
src/main/java/org/distorted/library/EffectQueueVertex.java | ||
---|---|---|
26 | 26 |
import org.distorted.library.type.Data2D; |
27 | 27 |
import org.distorted.library.type.Data3D; |
28 | 28 |
import org.distorted.library.type.Data4D; |
29 |
import org.distorted.library.type.Data5D; |
|
29 | 30 |
import org.distorted.library.type.Dynamic1D; |
30 | 31 |
import org.distorted.library.type.Dynamic2D; |
31 | 32 |
import org.distorted.library.type.Dynamic3D; |
32 | 33 |
import org.distorted.library.type.Dynamic4D; |
34 |
import org.distorted.library.type.Dynamic5D; |
|
33 | 35 |
import org.distorted.library.type.Static1D; |
34 | 36 |
import org.distorted.library.type.Static2D; |
35 | 37 |
import org.distorted.library.type.Static3D; |
36 | 38 |
import org.distorted.library.type.Static4D; |
39 |
import org.distorted.library.type.Static5D; |
|
37 | 40 |
|
38 | 41 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
39 | 42 |
|
... | ... | |
47 | 50 |
|
48 | 51 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
49 | 52 |
|
50 |
public EffectQueueVertex(DistortedObject obj)
|
|
53 |
EffectQueueVertex(DistortedObject obj) |
|
51 | 54 |
{ |
52 | 55 |
super(obj,NUM_UNIFORMS,INDEX); |
53 | 56 |
} |
... | ... | |
157 | 160 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
158 | 161 |
// Do various post-processing on already computed effects. |
159 | 162 |
// 1) here unlike in the fragment queue, we don't have to multiply the points by ModelView matrix because that gets done in the shader. |
160 |
// 2) in case of SWIRL, switch the angle from degrees to radians |
|
163 |
// 2) in case of SWIRL, switch the angles from degrees to radians
|
|
161 | 164 |
// 3) likewise in case of WAVE |
162 | 165 |
// 4) In case of DISTORT, invert the Y-axis |
163 | 166 |
|
164 |
void postprocess(int effect) |
|
167 |
private void postprocess(int effect)
|
|
165 | 168 |
{ |
166 | 169 |
if( mName[effect]==EffectNames.SWIRL.ordinal() ) |
167 | 170 |
{ |
... | ... | |
171 | 174 |
{ |
172 | 175 |
mUniforms[NUM_UNIFORMS*effect+2] = (float)(Math.PI*mUniforms[NUM_UNIFORMS*effect+2]/180); |
173 | 176 |
mUniforms[NUM_UNIFORMS*effect+3] = (float)(Math.PI*mUniforms[NUM_UNIFORMS*effect+3]/180); |
177 |
mUniforms[NUM_UNIFORMS*effect+4] = (float)(Math.PI*mUniforms[NUM_UNIFORMS*effect+4]/180); |
|
174 | 178 |
} |
175 | 179 |
if( mName[effect]==EffectNames.DISTORT.ordinal() ) |
176 | 180 |
{ |
... | ... | |
181 | 185 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
182 | 186 |
// wave |
183 | 187 |
|
184 |
synchronized long add(EffectNames eln, Data4D data, Data2D center, Data4D region)
|
|
188 |
synchronized long add(EffectNames eln, Data5D data, Data2D center, Data4D region)
|
|
185 | 189 |
{ |
186 | 190 |
if( mMax[INDEX]>mNumEffects ) |
187 | 191 |
{ |
188 | 192 |
EffectNames.fillWithUnities(eln.ordinal(), mUniforms, NUM_UNIFORMS*mNumEffects); |
189 | 193 |
|
190 |
if( data instanceof Dynamic4D)
|
|
191 |
mInter[0][mNumEffects] = (Dynamic4D)data;
|
|
192 |
else if( data instanceof Static4D)
|
|
194 |
if( data instanceof Dynamic5D)
|
|
195 |
mInter[0][mNumEffects] = (Dynamic5D)data;
|
|
196 |
else if( data instanceof Static5D)
|
|
193 | 197 |
{ |
198 |
Static5D tmp = (Static5D)data; |
|
199 |
|
|
194 | 200 |
mInter[0][mNumEffects] = null; |
195 |
mUniforms[NUM_UNIFORMS*mNumEffects ] = ((Static4D)data).getX(); |
|
196 |
mUniforms[NUM_UNIFORMS*mNumEffects+1] = ((Static4D)data).getY(); |
|
197 |
mUniforms[NUM_UNIFORMS*mNumEffects+2] = ((Static4D)data).getZ(); |
|
198 |
mUniforms[NUM_UNIFORMS*mNumEffects+3] = ((Static4D)data).getW(); |
|
201 |
mUniforms[NUM_UNIFORMS*mNumEffects ] = tmp.getX(); |
|
202 |
mUniforms[NUM_UNIFORMS*mNumEffects+1] = tmp.getY(); |
|
203 |
mUniforms[NUM_UNIFORMS*mNumEffects+2] = tmp.getZ(); |
|
204 |
mUniforms[NUM_UNIFORMS*mNumEffects+3] = tmp.getW(); |
|
205 |
mUniforms[NUM_UNIFORMS*mNumEffects+4] = tmp.getV(); |
|
199 | 206 |
} |
200 | 207 |
|
201 | 208 |
return addPriv(eln,center,region); |
... | ... | |
217 | 224 |
mInter[0][mNumEffects] = (Dynamic3D)data; |
218 | 225 |
else if( data instanceof Static3D) |
219 | 226 |
{ |
227 |
Static3D tmp = (Static3D)data; |
|
228 |
|
|
220 | 229 |
mInter[0][mNumEffects] = null; |
221 |
mUniforms[NUM_UNIFORMS*mNumEffects ] = ((Static3D)data).getX();
|
|
222 |
mUniforms[NUM_UNIFORMS*mNumEffects+1] = ((Static3D)data).getY();
|
|
223 |
mUniforms[NUM_UNIFORMS*mNumEffects+2] = ((Static3D)data).getZ();
|
|
230 |
mUniforms[NUM_UNIFORMS*mNumEffects ] = tmp.getX();
|
|
231 |
mUniforms[NUM_UNIFORMS*mNumEffects+1] = tmp.getY();
|
|
232 |
mUniforms[NUM_UNIFORMS*mNumEffects+2] = tmp.getZ();
|
|
224 | 233 |
} |
225 | 234 |
|
226 | 235 |
return addPriv(eln,center,region); |
src/main/java/org/distorted/library/type/Dynamic1D.java | ||
---|---|---|
24 | 24 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
25 | 25 |
/** |
26 | 26 |
* A 1-dimensional implementation of the Dynamic class to interpolate between a list |
27 |
* of Float1Ds.
|
|
27 |
* of Static1Ds.
|
|
28 | 28 |
*/ |
29 | 29 |
|
30 | 30 |
public class Dynamic1D extends Dynamic implements Data1D |
src/main/java/org/distorted/library/type/Dynamic2D.java | ||
---|---|---|
24 | 24 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
25 | 25 |
/** |
26 | 26 |
* A 2-dimensional implementation of the Dynamic class to interpolate between a list |
27 |
* of Float2Ds.
|
|
27 |
* of Static2Ds.
|
|
28 | 28 |
*/ |
29 | 29 |
|
30 | 30 |
public class Dynamic2D extends Dynamic implements Data2D |
src/main/java/org/distorted/library/type/Dynamic3D.java | ||
---|---|---|
24 | 24 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
25 | 25 |
/** |
26 | 26 |
* A 3-dimensional implementation of the Dynamic class to interpolate between a list |
27 |
* of Float3Ds.
|
|
27 |
* of Static3Ds.
|
|
28 | 28 |
*/ |
29 | 29 |
|
30 | 30 |
public class Dynamic3D extends Dynamic implements Data3D |
src/main/res/raw/main_vertex_shader.glsl | ||
---|---|---|
425 | 425 |
|
426 | 426 |
if( deg != 0.0 && length != 0.0 ) |
427 | 427 |
{ |
428 |
float alpha = vUniforms[effect].z; |
|
429 |
float beta = vUniforms[effect].w; |
|
428 |
float offset= vUniforms[effect ].z; |
|
429 |
float alpha = vUniforms[effect ].w; |
|
430 |
float beta = vUniforms[effect+1].x; |
|
430 | 431 |
|
431 | 432 |
float sinA = sin(alpha); |
432 | 433 |
float cosA = cos(alpha); |
433 | 434 |
float sinB = sin(beta); |
434 | 435 |
float cosB = cos(beta); |
435 | 436 |
|
436 |
float angle= 1.578*(ps.x*cosB-ps.y*sinB) / length; |
|
437 |
float angle= 1.578*(ps.x*cosB-ps.y*sinB) / length + offset;
|
|
437 | 438 |
|
438 |
vec3 dir = vec3(sinB*cosA,cosB*cosA,sinA);
|
|
439 |
vec3 dir= vec3(sinB*cosA,cosB*cosA,sinA); |
|
439 | 440 |
|
440 | 441 |
v.xyz += sin(angle)*deg*dir; |
441 | 442 |
|
Also available in: Unified diff
Make the WAVE effect 5D (extra parameter 'offset')