Project

General

Profile

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

examples / src / main / java / org / distorted / examples / aroundtheworld / AroundTheWorldEffectsManager.java @ 287a5475

1
///////////////////////////////////////////////////////////////////////////////////////////////////
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
package org.distorted.examples.aroundtheworld;
21

    
22
///////////////////////////////////////////////////////////////////////////////////////////////////
23

    
24
import org.distorted.library.DistortedObject;
25
import org.distorted.library.type.Dynamic;
26
import org.distorted.library.type.Dynamic1D;
27
import org.distorted.library.type.Dynamic2D;
28
import org.distorted.library.type.Dynamic3D;
29
import org.distorted.library.type.Dynamic5D;
30
import org.distorted.library.type.Static1D;
31
import org.distorted.library.type.Static2D;
32
import org.distorted.library.type.Static3D;
33
import org.distorted.library.type.Static4D;
34
import org.distorted.library.type.Static5D;
35

    
36
class AroundTheWorldEffectsManager
37
  {
38
  private float mWhiteness, mBlackness, mAsianness;  // those always sum up to 1
39

    
40
  // WHITENESS
41
  // Vertex effects:
42
  // a) make the lips smaller (SINK)
43
  private Static4D wLipsRegion;
44
  private Static3D wLipsCenter;
45
  private Static1D wLipsFactor;
46
  private Dynamic1D wLipsDyn;
47

    
48
  // ASIANNESS
49
  // Vertex Effects:
50
  // a) move lips & nose higher (DISTORT)
51
  private Static4D aLipsNoseRegion;
52
  private Static3D aLipsNoseCenter;
53
  private Static3D aLipsNoseFactor;
54
  private Dynamic3D aLipsNoseDyn;
55
  // b) make the nose broader (PINCH)
56
  private Static4D aNoseBroaderRegion;
57
  private Static3D aNoseBroaderCenter;
58
  private Static2D aNoseBroaderFactor;
59
  private Dynamic2D aNoseBroaderDyn;
60
  // c) make the nostrils more visible (DISTORT)
61
  private Static4D aNostrilsRegion;
62
  private Static3D aNostrilsCenter;
63
  private Static3D aNostrilsFactor;
64
  private Dynamic3D aNostrilsDyn;
65
  // d) rotate eyes (2 x SWIRL)
66
  private Static4D aEyesRegion;
67
  private Static3D aLEyeCenter, aREyeCenter;
68
  private Static1D aLEyeFactor, aREyeFactor;
69
  private Dynamic1D aLEyeDyn, aREyeDyn;
70
  // e) move eyebrow higher (DISTORT)
71
  private Static4D aEyebrowsRegion;
72
  private Static3D aEyebrowsCenter;
73
  private Static3D aEyebrowsFactor;
74
  private Dynamic3D aEyebrowsDyn;
75

    
76
  // Fragment effects:
77
  // a) change color of the skin to more brown and less red (CHROMA)
78
  private Static4D aSkinColorRegion;
79
  private Static3D aChromaSkin;
80
  private Static1D aChromaSkinFactor;
81
  private Dynamic1D aChromaSkinDyn;
82
  // b) darken both eyes (2 x SMOOTH_CHROMA)
83
  private Static4D aLEyeColorRegion, aREyeColorRegion;
84
  private Static3D aChromaEyes;
85
  private Static1D aChromaEyesFactor;
86
  private Dynamic1D aChromaEyesDyn;
87

    
88
  // BLACKNESS
89
  // Vertex Effects
90
  // a) make the whole face broader (PINCH)
91
  private Static4D bFaceRegion;
92
  private Static3D bFaceCenter;
93
  private Static2D bFaceFactor;
94
  private Dynamic2D bFaceDyn;
95
  // b) tip of the nose lower (DISTORT)
96
  private Static4D bTipLowerRegion;
97
  private Static3D bTipLowerCenter;
98
  private Static3D bTipLowerFactor;
99
  private Dynamic3D bTipLowerDyn;
100
  // c) broaden the whole nose: (PINCH)
101
  private Static4D bWholeNoseRegion;
102
  private Static3D bWholeNoseCenter;
103
  private Static2D bWholeNoseFactor;
104
  private Dynamic2D bWholeNoseDyn;
105
  // d) broaden the tip of the nose some more: (PINCH)
106
  private Static4D bNoseBroaderRegion;
107
  private Static3D bNoseBroaderCenter;
108
  private Static2D bNoseBroaderFactor;
109
  private Dynamic2D bNoseBroaderDyn;
110
  // 3) make lips higher: (PINCH)
111
  private Static4D bLipsRegion;
112
  private Static3D bLipsCenter;
113
  private Static2D bLipsFactor;
114
  private Dynamic2D bLipsDyn;
115
  // Fragment effects
116
  // a) make the whole face darker (CHROMA)
117
  private Static4D bSkinColorRegion;
118
  private Static3D bChromaSkin;
119
  private Static1D bChromaSkinFactor;
120
  private Dynamic1D bChromaSkinDyn;
121
  // b) move both eyes back to whiteness (2 x SMOOTH CHROMA)
122
  private Static4D bLEyeColorRegion, bREyeColorRegion;
123
  private Static3D bChromaEyes;
124
  private Static1D bChromaEyesFactor;
125
  private Dynamic1D bChromaEyesDyn;
126
  // c) darken both pupils (2 x SMOOTH_CHROMA)
127
  private Static4D bLPupilColorRegion, bRPupilColorRegion;
128
  private Static3D bChromaPupil;
129
  private Static1D bChromaPupilFactor;
130
  private Dynamic1D bChromaPupilDyn;
131
  // d) all those chroma effects have reduced contrast - bring it back
132
  private Static1D bContrastFactor;
133
  private Dynamic1D bContrastDyn;
134

    
135
///////////////////////////////////////////////////////////////////////////////////////////////////
136

    
137
  AroundTheWorldEffectsManager()
138
    {
139
    mWhiteness = 1;
140
    mBlackness = 0;
141
    mAsianness = 0;
142

    
143
    // WHITENESS
144
    // Vertex Effects
145
    wLipsRegion = new Static4D(0,0,100,100);
146
    wLipsCenter = new Static3D(300,500,0);
147
    wLipsFactor = new Static1D(0.7f);
148
    wLipsDyn    = new Dynamic1D();
149
    wLipsDyn.add(wLipsFactor);
150

    
151
    // ASIANNESS
152
    // Vertex Effects
153
    aLipsNoseRegion    = new Static4D(0,0,267,267);
154
    aLipsNoseCenter    = new Static3D(300,560,0);
155
    aLipsNoseDyn       = new Dynamic3D();
156
    aLipsNoseFactor    = new Static3D(0,0,0);
157
    aLipsNoseDyn.add(aLipsNoseFactor);
158

    
159
    aNoseBroaderRegion = new Static4D(0,0,130,130);
160
    aNoseBroaderCenter = new Static3D(300,307,0);
161
    aNoseBroaderDyn    = new Dynamic2D();
162
    aNoseBroaderFactor = new Static2D(0,90);
163
    aNoseBroaderDyn.add(aNoseBroaderFactor);
164

    
165
    aNostrilsRegion    = new Static4D(0,0,60,60);
166
    aNostrilsCenter    = new Static3D(300,336,0);
167
    aNostrilsDyn       = new Dynamic3D();
168
    aNostrilsFactor    = new Static3D(0,0,0);
169
    aNostrilsDyn.add(aNostrilsFactor);
170

    
171
    aEyesRegion        = new Static4D(0,0,83,83);
172
    aLEyeCenter        = new Static3D(176,230,0);
173
    aREyeCenter        = new Static3D(420,230,0);
174
    aLEyeDyn           = new Dynamic1D();
175
    aREyeDyn           = new Dynamic1D();
176
    aLEyeFactor        = new Static1D(0);
177
    aREyeFactor        = new Static1D(0);
178
    aLEyeDyn.add(aLEyeFactor);
179
    aREyeDyn.add(aREyeFactor);
180

    
181
    aEyebrowsRegion    = new Static4D(0,0,142,142);
182
    aEyebrowsCenter    = new Static3D(300,100,0);
183
    aEyebrowsDyn       = new Dynamic3D();
184
    aEyebrowsFactor    = new Static3D(0,0,0);
185
    aEyebrowsDyn.add(aEyebrowsFactor);
186

    
187
    // Fragment Effects
188
    aSkinColorRegion   = new Static4D(300,300,600,600);
189
    aLEyeColorRegion   = new Static4D(172,230,29,25);
190
    aREyeColorRegion   = new Static4D(423,230,29,25);
191

    
192
    aChromaSkin        = new Static3D(0.5f, 0.5f, 0.5f);
193
    aChromaEyes        = new Static3D(0.5f, 0.14f, 0.14f);
194
    aChromaSkinFactor  = new Static1D(0.0f);
195
    aChromaEyesFactor  = new Static1D(0.0f);
196

    
197
    aChromaSkinDyn = new Dynamic1D();
198
    aChromaSkinDyn.add(aChromaSkinFactor);
199
    aChromaEyesDyn = new Dynamic1D();
200
    aChromaEyesDyn.add(aChromaEyesFactor);
201

    
202
    // BLACKNESS
203
    // Vertex Effects
204
    bFaceRegion        = new Static4D(0,0,600,600);
205
    bFaceCenter        = new Static3D(300,300,0);
206
    bFaceFactor        = new Static2D(1.0f,90.0f);
207
    bFaceDyn           = new Dynamic2D();
208
    bFaceDyn.add(bFaceFactor);
209

    
210
    bTipLowerRegion    = new Static4D(0,0,41,41);
211
    bTipLowerCenter    = new Static3D(300,393,0);
212
    bTipLowerFactor    = new Static3D(0,0,0);
213
    bTipLowerDyn       = new Dynamic3D();
214
    bTipLowerDyn.add(bTipLowerFactor);
215

    
216
    bWholeNoseRegion   = new Static4D(0,0,130,130);
217
    bWholeNoseCenter   = new Static3D(300,357,0);
218
    bWholeNoseFactor   = new Static2D(1.0f,90.0f);
219
    bWholeNoseDyn      = new Dynamic2D();
220
    bWholeNoseDyn.add(bWholeNoseFactor);
221

    
222
    bNoseBroaderRegion = new Static4D(0,0,95,95);
223
    bNoseBroaderCenter = new Static3D(300,408,0);
224
    bNoseBroaderFactor = new Static2D(1.0f,90.0f);
225
    bNoseBroaderDyn    = new Dynamic2D();
226
    bNoseBroaderDyn.add(bNoseBroaderFactor);
227

    
228
    bLipsRegion        = new Static4D(0,96,118,118);
229
    bLipsCenter        = new Static3D(300,458,0);
230
    bLipsFactor        = new Static2D(1.0f,0.0f);
231
    bLipsDyn           = new Dynamic2D();
232
    bLipsDyn.add(bLipsFactor);
233

    
234
    // Fragment Effects
235
    bSkinColorRegion   = new Static4D(300,300,600,600);
236
    bLEyeColorRegion = new Static4D(158,241,55,24);
237
    bREyeColorRegion = new Static4D(436,241,55,24);
238
    bLPupilColorRegion   = new Static4D(166,230,28,23);
239
    bRPupilColorRegion   = new Static4D(431,230,28,23);
240

    
241
    bChromaSkin        = new Static3D(0.4f, 0.25f, 0.25f);
242
    bChromaEyes        = new Static3D(1.0f, 1.0f, 1.0f);
243
    bChromaPupil       = new Static3D(0.4f, 0.14f, 0.14f);
244
    bChromaSkinFactor  = new Static1D(0.0f);
245
    bChromaPupilFactor = new Static1D(0.0f);
246
    bChromaEyesFactor  = new Static1D(0.0f);
247
    bContrastFactor    = new Static1D(0.0f);
248

    
249
    bChromaSkinDyn = new Dynamic1D();
250
    bChromaSkinDyn.add(bChromaSkinFactor);
251
    bChromaEyesDyn = new Dynamic1D();
252
    bChromaEyesDyn.add(bChromaEyesFactor);
253
    bChromaPupilDyn = new Dynamic1D();
254
    bChromaPupilDyn.add(bChromaPupilFactor);
255
    bContrastDyn = new Dynamic1D();
256
    bContrastDyn.add(bContrastFactor);
257
    }
258

    
259
///////////////////////////////////////////////////////////////////////////////////////////////////
260

    
261
  synchronized void apply(DistortedObject obj)
262
    {
263
    setRace(mBlackness, mAsianness);
264

    
265
    // WHITENESS
266
    obj.sink(wLipsDyn, wLipsCenter, wLipsRegion);
267

    
268
    // ASIANNESS
269
    obj.distort(aLipsNoseDyn, aLipsNoseCenter, aLipsNoseRegion);
270
    obj.pinch(aNoseBroaderDyn, aNoseBroaderCenter, aNoseBroaderRegion);
271
    obj.distort(aNostrilsDyn, aNostrilsCenter, aNostrilsRegion);
272
    obj.swirl(aLEyeDyn, aLEyeCenter, aEyesRegion);
273
    obj.swirl(aREyeDyn, aREyeCenter, aEyesRegion);
274
    obj.distort(aEyebrowsDyn, aEyebrowsCenter, aEyebrowsRegion);
275

    
276
    obj.chroma(aChromaSkinDyn, aChromaSkin, aSkinColorRegion, false);
277
    obj.chroma(aChromaEyesDyn, aChromaEyes, aLEyeColorRegion, true);
278
    obj.chroma(aChromaEyesDyn, aChromaEyes, aREyeColorRegion, true);
279

    
280
    // BLACKNESS
281
    obj.pinch(bFaceDyn, bFaceCenter, bFaceRegion);
282
    obj.distort(bTipLowerDyn, bTipLowerCenter, bTipLowerRegion);
283
    obj.pinch(bWholeNoseDyn, bWholeNoseCenter, bWholeNoseRegion);
284
    obj.pinch(bNoseBroaderDyn, bNoseBroaderCenter, bNoseBroaderRegion);
285
    obj.pinch(bLipsDyn, bLipsCenter, bLipsRegion);
286

    
287
    obj.chroma(bChromaSkinDyn, bChromaSkin, bSkinColorRegion, false);
288
    obj.chroma(bChromaEyesDyn, bChromaEyes, bLEyeColorRegion, true);
289
    obj.chroma(bChromaEyesDyn, bChromaEyes, bREyeColorRegion, true);
290
    obj.chroma(bChromaPupilDyn, bChromaPupil, bLPupilColorRegion, true);
291
    obj.chroma(bChromaPupilDyn, bChromaPupil, bRPupilColorRegion, true);
292

    
293
    obj.contrast(bContrastDyn);
294
    }
295

    
296
///////////////////////////////////////////////////////////////////////////////////////////////////
297

    
298
  synchronized void setRace(float blackness, float asianness)
299
    {
300
    mWhiteness = 1 - blackness - asianness;
301
    mAsianness = asianness;
302
    mBlackness = blackness;
303

    
304
    //android.util.Log.e("manager", "blackness="+blackness+" asianness="+asianness);
305

    
306
    // WHITENESS
307
    wLipsFactor.set(1.0f-0.3f*mWhiteness);
308

    
309
    // ASIANNESS
310
    aLipsNoseFactor.set2(-23.0f*mAsianness);
311
    aNoseBroaderFactor.set1(1.0f+0.85f*mAsianness);
312
    aNostrilsFactor.set2(-12.0f*mAsianness);
313
    aLEyeFactor.set(+10.0f*mAsianness);
314
    aREyeFactor.set(-10.0f*mAsianness);
315
    aEyebrowsFactor.set2(-40.0f*mAsianness);
316

    
317
    aChromaSkinFactor.set(0.2f*mAsianness);
318
    aChromaEyesFactor.set(0.7f*mAsianness);
319

    
320
    // BLACKNESS
321
    bFaceFactor.set1(1.0f + 0.1f*mBlackness);
322
    bTipLowerFactor.set2(23.0f*mBlackness);
323
    bWholeNoseFactor.set1(1.0f+0.5f*mBlackness);
324
    bNoseBroaderFactor.set1(1.0f+0.38f*mBlackness);
325
    bLipsFactor.set1(1.0f+1.0f*mBlackness);
326

    
327
    bChromaSkinFactor.set(0.75f*mBlackness);
328
    bChromaEyesFactor.set(0.2f*mBlackness);
329
    bChromaPupilFactor.set(0.6f*mBlackness);
330

    
331
    bContrastFactor.set(1.0f+1.5f*mBlackness);
332
    }
333
  }
(2-2/6)