Revision 0df17fad
Added by Leszek Koltunski almost 8 years ago
src/main/java/org/distorted/library/EffectQueueMatrix.java | ||
---|---|---|
105 | 105 |
|
106 | 106 |
for(int i=0; i<mNumEffects; i++) |
107 | 107 |
{ |
108 |
if( mInter[0][i]!=null && mInter[0][i].interpolateMain(mUniforms ,NUM_UNIFORMS*i+3, mCurrentDuration[i], step) )
|
|
108 |
if( mInter[0][i]!=null && mInter[0][i].interpolateMain(mUniforms ,NUM_UNIFORMS*i, mCurrentDuration[i], step) ) |
|
109 | 109 |
{ |
110 | 110 |
for(int j=0; j<mNumListeners; j++) |
111 | 111 |
EffectMessageSender.newMessage( mListeners.elementAt(j), |
... | ... | |
115 | 115 |
mBitmapID, |
116 | 116 |
null); |
117 | 117 |
|
118 |
if( EffectNames.isUnity(mType[i], mUniforms, NUM_UNIFORMS*i+3) )
|
|
118 |
if( EffectNames.isUnity(mType[i], mUniforms, NUM_UNIFORMS*i) ) |
|
119 | 119 |
{ |
120 | 120 |
remove(i); |
121 | 121 |
i--; |
... | ... | |
125 | 125 |
|
126 | 126 |
if( mInter[1][i]!=null ) |
127 | 127 |
{ |
128 |
mInter[1][i].interpolateMain(mUniforms, NUM_UNIFORMS*i, mCurrentDuration[i]); |
|
128 |
mInter[1][i].interpolateMain(mUniforms, NUM_UNIFORMS*i+4, mCurrentDuration[i]);
|
|
129 | 129 |
} |
130 | 130 |
|
131 | 131 |
mCurrentDuration[i] += step; |
... | ... | |
161 | 161 |
{ |
162 | 162 |
if (mType[i] == EffectNames.ROTATE.ordinal() ) |
163 | 163 |
{ |
164 |
x = mUniforms[NUM_UNIFORMS*i ];
|
|
165 |
y = mUniforms[NUM_UNIFORMS*i+1];
|
|
166 |
z = mUniforms[NUM_UNIFORMS*i+2];
|
|
164 |
x = mUniforms[NUM_UNIFORMS*i+4];
|
|
165 |
y = mUniforms[NUM_UNIFORMS*i+5];
|
|
166 |
z = mUniforms[NUM_UNIFORMS*i+6];
|
|
167 | 167 |
|
168 | 168 |
Matrix.translateM(viewMatrix, 0, x,-y, z); |
169 |
Matrix.rotateM( viewMatrix, 0, mUniforms[NUM_UNIFORMS*i+3], mUniforms[NUM_UNIFORMS*i+4], mUniforms[NUM_UNIFORMS*i+5], mUniforms[NUM_UNIFORMS*i+6]);
|
|
169 |
Matrix.rotateM( viewMatrix, 0, mUniforms[NUM_UNIFORMS*i], mUniforms[NUM_UNIFORMS*i+1], mUniforms[NUM_UNIFORMS*i+2], mUniforms[NUM_UNIFORMS*i+3]);
|
|
170 | 170 |
Matrix.translateM(viewMatrix, 0,-x, y,-z); |
171 | 171 |
} |
172 | 172 |
else if(mType[i] == EffectNames.QUATERNION.ordinal() ) |
173 | 173 |
{ |
174 |
x = mUniforms[NUM_UNIFORMS*i ];
|
|
175 |
y = mUniforms[NUM_UNIFORMS*i+1];
|
|
176 |
z = mUniforms[NUM_UNIFORMS*i+2];
|
|
174 |
x = mUniforms[NUM_UNIFORMS*i+4];
|
|
175 |
y = mUniforms[NUM_UNIFORMS*i+5];
|
|
176 |
z = mUniforms[NUM_UNIFORMS*i+6];
|
|
177 | 177 |
|
178 | 178 |
Matrix.translateM(viewMatrix, 0, x,-y, z); |
179 |
multiplyByQuat(viewMatrix, mUniforms[NUM_UNIFORMS*i+3], mUniforms[NUM_UNIFORMS*i+4], mUniforms[NUM_UNIFORMS*i+5], mUniforms[NUM_UNIFORMS*i+6]);
|
|
179 |
multiplyByQuat(viewMatrix, mUniforms[NUM_UNIFORMS*i], mUniforms[NUM_UNIFORMS*i+1], mUniforms[NUM_UNIFORMS*i+2], mUniforms[NUM_UNIFORMS*i+3]);
|
|
180 | 180 |
Matrix.translateM(viewMatrix, 0,-x, y,-z); |
181 | 181 |
} |
182 | 182 |
else if(mType[i] == EffectNames.MOVE.ordinal() ) |
183 | 183 |
{ |
184 |
sx = mUniforms[NUM_UNIFORMS*i+3];
|
|
185 |
sy = mUniforms[NUM_UNIFORMS*i+4];
|
|
186 |
sz = mUniforms[NUM_UNIFORMS*i+5];
|
|
184 |
sx = mUniforms[NUM_UNIFORMS*i ];
|
|
185 |
sy = mUniforms[NUM_UNIFORMS*i+1];
|
|
186 |
sz = mUniforms[NUM_UNIFORMS*i+2];
|
|
187 | 187 |
|
188 | 188 |
Matrix.translateM(viewMatrix, 0, sx,-sy, sz); |
189 | 189 |
} |
190 | 190 |
else if(mType[i] == EffectNames.SCALE.ordinal() ) |
191 | 191 |
{ |
192 |
sx = mUniforms[NUM_UNIFORMS*i+3];
|
|
193 |
sy = mUniforms[NUM_UNIFORMS*i+4];
|
|
194 |
sz = mUniforms[NUM_UNIFORMS*i+5];
|
|
192 |
sx = mUniforms[NUM_UNIFORMS*i ];
|
|
193 |
sy = mUniforms[NUM_UNIFORMS*i+1];
|
|
194 |
sz = mUniforms[NUM_UNIFORMS*i+2];
|
|
195 | 195 |
|
196 | 196 |
Matrix.scaleM(viewMatrix, 0, sx, sy, sz); |
197 | 197 |
} |
198 | 198 |
else if(mType[i] == EffectNames.SHEAR.ordinal() ) |
199 | 199 |
{ |
200 |
x = mUniforms[NUM_UNIFORMS*i ];
|
|
201 |
y = mUniforms[NUM_UNIFORMS*i+1];
|
|
202 |
z = mUniforms[NUM_UNIFORMS*i+2];
|
|
203 |
|
|
204 |
sx = mUniforms[NUM_UNIFORMS*i+3];
|
|
205 |
sy = mUniforms[NUM_UNIFORMS*i+4];
|
|
206 |
sz = mUniforms[NUM_UNIFORMS*i+5];
|
|
207 |
|
|
200 |
sx = mUniforms[NUM_UNIFORMS*i ];
|
|
201 |
sy = mUniforms[NUM_UNIFORMS*i+1];
|
|
202 |
sz = mUniforms[NUM_UNIFORMS*i+2];
|
|
203 |
|
|
204 |
x = mUniforms[NUM_UNIFORMS*i+4];
|
|
205 |
y = mUniforms[NUM_UNIFORMS*i+5];
|
|
206 |
z = mUniforms[NUM_UNIFORMS*i+6];
|
|
207 |
|
|
208 | 208 |
Matrix.translateM(viewMatrix, 0, x,-y, z); |
209 | 209 |
|
210 | 210 |
viewMatrix[4] += sx*viewMatrix[0]; // Multiply viewMatrix by 1 x 0 0 , i.e. X-shear. TODO: change this so it is symmetric w respect to all the axis. |
... | ... | |
260 | 260 |
else if( vector instanceof Static3D ) |
261 | 261 |
{ |
262 | 262 |
mInter[0][mNumEffects] = null; |
263 |
mUniforms[NUM_UNIFORMS*mNumEffects+3] = ((Static3D)vector).getX();
|
|
264 |
mUniforms[NUM_UNIFORMS*mNumEffects+4] = ((Static3D)vector).getY();
|
|
265 |
mUniforms[NUM_UNIFORMS*mNumEffects+5] = ((Static3D)vector).getZ();
|
|
263 |
mUniforms[NUM_UNIFORMS*mNumEffects ] = ((Static3D)vector).getX();
|
|
264 |
mUniforms[NUM_UNIFORMS*mNumEffects+1] = ((Static3D)vector).getY();
|
|
265 |
mUniforms[NUM_UNIFORMS*mNumEffects+2] = ((Static3D)vector).getZ();
|
|
266 | 266 |
} |
267 | 267 |
else return -1; |
268 | 268 |
|
... | ... | |
275 | 275 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
276 | 276 |
// rotate - static axis |
277 | 277 |
|
278 |
synchronized long add(EffectNames eln, Data3D center, Data1D angle, Static3D axis)
|
|
278 |
synchronized long add(EffectNames eln, Data1D angle, Static3D axis, Data3D center)
|
|
279 | 279 |
{ |
280 | 280 |
if( mMax[INDEX]>mNumEffects ) |
281 | 281 |
{ |
282 |
if( center instanceof Dynamic3D) mInter[1][mNumEffects] = (Dynamic3D)center; |
|
283 |
else if( center instanceof Static3D ) |
|
284 |
{ |
|
285 |
mInter[1][mNumEffects] = null; |
|
286 |
mUniforms[NUM_UNIFORMS*mNumEffects ] = ((Static3D)center).getX(); |
|
287 |
mUniforms[NUM_UNIFORMS*mNumEffects+1] = ((Static3D)center).getY(); |
|
288 |
mUniforms[NUM_UNIFORMS*mNumEffects+2] = ((Static3D)center).getZ(); |
|
289 |
} |
|
290 |
else return -1; |
|
291 |
|
|
292 | 282 |
if( angle instanceof Dynamic1D) mInter[0][mNumEffects] = (Dynamic1D)angle; |
293 | 283 |
else if( angle instanceof Static1D) |
294 | 284 |
{ |
295 | 285 |
mInter[0][mNumEffects] = null; |
296 |
mUniforms[NUM_UNIFORMS*mNumEffects+3] = ((Static1D)angle).getX();
|
|
286 |
mUniforms[NUM_UNIFORMS*mNumEffects] = ((Static1D)angle).getX(); |
|
297 | 287 |
} |
298 | 288 |
else return -1; |
299 | 289 |
|
300 |
mUniforms[NUM_UNIFORMS*mNumEffects+4] = axis.getX(); |
|
301 |
mUniforms[NUM_UNIFORMS*mNumEffects+5] = axis.getY(); |
|
302 |
mUniforms[NUM_UNIFORMS*mNumEffects+6] = axis.getZ(); |
|
290 |
mUniforms[NUM_UNIFORMS*mNumEffects+1] = axis.getX(); |
|
291 |
mUniforms[NUM_UNIFORMS*mNumEffects+2] = axis.getY(); |
|
292 |
mUniforms[NUM_UNIFORMS*mNumEffects+3] = axis.getZ(); |
|
293 |
|
|
294 |
if( center instanceof Dynamic3D) mInter[1][mNumEffects] = (Dynamic3D)center; |
|
295 |
else if( center instanceof Static3D ) |
|
296 |
{ |
|
297 |
mInter[1][mNumEffects] = null; |
|
298 |
mUniforms[NUM_UNIFORMS*mNumEffects+4] = ((Static3D)center).getX(); |
|
299 |
mUniforms[NUM_UNIFORMS*mNumEffects+5] = ((Static3D)center).getY(); |
|
300 |
mUniforms[NUM_UNIFORMS*mNumEffects+6] = ((Static3D)center).getZ(); |
|
301 |
} |
|
302 |
else return -1; |
|
303 | 303 |
|
304 | 304 |
return addBase(eln); |
305 | 305 |
} |
... | ... | |
310 | 310 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
311 | 311 |
// quaternion or rotate - dynamic axis |
312 | 312 |
|
313 |
synchronized long add(EffectNames eln, Data3D center, Data4D data)
|
|
313 |
synchronized long add(EffectNames eln, Data4D data, Data3D center)
|
|
314 | 314 |
{ |
315 | 315 |
if( mMax[INDEX]>mNumEffects ) |
316 | 316 |
{ |
317 |
if( center instanceof Dynamic3D) mInter[1][mNumEffects] = (Dynamic3D)center; |
|
318 |
else if( center instanceof Static3D ) |
|
319 |
{ |
|
320 |
mInter[1][mNumEffects] = null; |
|
321 |
mUniforms[NUM_UNIFORMS*mNumEffects ] = ((Static3D)center).getX(); |
|
322 |
mUniforms[NUM_UNIFORMS*mNumEffects+1] = ((Static3D)center).getY(); |
|
323 |
mUniforms[NUM_UNIFORMS*mNumEffects+2] = ((Static3D)center).getZ(); |
|
324 |
} |
|
325 |
else return -1; |
|
326 |
|
|
327 | 317 |
if( data instanceof Dynamic4D ) mInter[0][mNumEffects] = (Dynamic4D)data; |
328 | 318 |
else if( data instanceof DynamicQuat) mInter[0][mNumEffects] = (DynamicQuat)data; |
329 | 319 |
else if( data instanceof Static4D ) |
330 | 320 |
{ |
331 | 321 |
mInter[0][mNumEffects] = null; |
332 |
mUniforms[NUM_UNIFORMS*mNumEffects+3] = ((Static4D)data).getX(); |
|
333 |
mUniforms[NUM_UNIFORMS*mNumEffects+4] = ((Static4D)data).getY(); |
|
334 |
mUniforms[NUM_UNIFORMS*mNumEffects+5] = ((Static4D)data).getZ(); |
|
335 |
mUniforms[NUM_UNIFORMS*mNumEffects+6] = ((Static4D)data).getW(); |
|
322 |
mUniforms[NUM_UNIFORMS*mNumEffects ] = ((Static4D)data).getX(); |
|
323 |
mUniforms[NUM_UNIFORMS*mNumEffects+1] = ((Static4D)data).getY(); |
|
324 |
mUniforms[NUM_UNIFORMS*mNumEffects+2] = ((Static4D)data).getZ(); |
|
325 |
mUniforms[NUM_UNIFORMS*mNumEffects+3] = ((Static4D)data).getW(); |
|
326 |
} |
|
327 |
else return -1; |
|
328 |
|
|
329 |
if( center instanceof Dynamic3D) mInter[1][mNumEffects] = (Dynamic3D)center; |
|
330 |
else if( center instanceof Static3D ) |
|
331 |
{ |
|
332 |
mInter[1][mNumEffects] = null; |
|
333 |
mUniforms[NUM_UNIFORMS*mNumEffects+4] = ((Static3D)center).getX(); |
|
334 |
mUniforms[NUM_UNIFORMS*mNumEffects+5] = ((Static3D)center).getY(); |
|
335 |
mUniforms[NUM_UNIFORMS*mNumEffects+6] = ((Static3D)center).getZ(); |
|
336 | 336 |
} |
337 | 337 |
else return -1; |
338 | 338 |
|
... | ... | |
345 | 345 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
346 | 346 |
// shear |
347 | 347 |
|
348 |
synchronized long add(EffectNames eln, Data3D center, Data3D shear)
|
|
348 |
synchronized long add(EffectNames eln, Data3D shear, Data3D center)
|
|
349 | 349 |
{ |
350 | 350 |
if( mMax[INDEX]>mNumEffects ) |
351 | 351 |
{ |
352 |
if( center instanceof Dynamic3D) mInter[1][mNumEffects] = (Dynamic3D)center;
|
|
353 |
else if( center instanceof Static3D )
|
|
352 |
if( shear instanceof Dynamic3D) mInter[0][mNumEffects] = (Dynamic3D)shear;
|
|
353 |
else if( shear instanceof Static3D )
|
|
354 | 354 |
{ |
355 |
mInter[1][mNumEffects] = null;
|
|
356 |
mUniforms[NUM_UNIFORMS*mNumEffects ] = ((Static3D)center).getX();
|
|
357 |
mUniforms[NUM_UNIFORMS*mNumEffects+1] = ((Static3D)center).getY();
|
|
358 |
mUniforms[NUM_UNIFORMS*mNumEffects+2] = ((Static3D)center).getZ();
|
|
355 |
mInter[0][mNumEffects] = null;
|
|
356 |
mUniforms[NUM_UNIFORMS*mNumEffects ] = ((Static3D)shear).getX();
|
|
357 |
mUniforms[NUM_UNIFORMS*mNumEffects+1] = ((Static3D)shear).getY();
|
|
358 |
mUniforms[NUM_UNIFORMS*mNumEffects+2] = ((Static3D)shear).getZ();
|
|
359 | 359 |
} |
360 | 360 |
else return -1; |
361 | 361 |
|
362 |
if( shear instanceof Dynamic3D) mInter[0][mNumEffects] = (Dynamic3D)shear;
|
|
363 |
else if( shear instanceof Static3D )
|
|
362 |
if( center instanceof Dynamic3D) mInter[1][mNumEffects] = (Dynamic3D)center;
|
|
363 |
else if( center instanceof Static3D )
|
|
364 | 364 |
{ |
365 |
mInter[0][mNumEffects] = null;
|
|
366 |
mUniforms[NUM_UNIFORMS*mNumEffects+3] = ((Static3D)shear).getX();
|
|
367 |
mUniforms[NUM_UNIFORMS*mNumEffects+4] = ((Static3D)shear).getY();
|
|
368 |
mUniforms[NUM_UNIFORMS*mNumEffects+5] = ((Static3D)shear).getZ();
|
|
365 |
mInter[1][mNumEffects] = null;
|
|
366 |
mUniforms[NUM_UNIFORMS*mNumEffects+4] = ((Static3D)center).getX();
|
|
367 |
mUniforms[NUM_UNIFORMS*mNumEffects+5] = ((Static3D)center).getY();
|
|
368 |
mUniforms[NUM_UNIFORMS*mNumEffects+6] = ((Static3D)center).getZ();
|
|
369 | 369 |
} |
370 | 370 |
else return -1; |
371 | 371 |
|
Also available in: Unified diff
- Javadoc for EffectNames
- make Matrix effects consistent with the rest (center of effect as last parameter!)
- bugfix for yesterday's bugfix (we only want to send 'EFFECT_REMOVED' messages if it was really the Application that called 'abortAll' and not when we are cleaning up everything)