Revision 62c869ad
Added by Leszek Koltunski over 3 years ago
src/main/java/org/distorted/library/mesh/MeshBase.java | ||
---|---|---|
255 | 255 |
|
256 | 256 |
void applyMatrix(MatrixEffect effect, int andAssoc, int equAssoc) |
257 | 257 |
{ |
258 |
float[] matrix = new float[16]; |
|
258 |
float[] matrixP = new float[16]; |
|
259 |
float[] matrixV = new float[16]; |
|
259 | 260 |
float[] uniforms = new float[7]; |
260 | 261 |
int start, end=-1, numComp = mEffComponent.size(); |
261 | 262 |
|
262 |
Matrix.setIdentityM(matrix,0); |
|
263 |
Matrix.setIdentityM(matrixP,0); |
|
264 |
Matrix.setIdentityM(matrixV,0); |
|
263 | 265 |
effect.compute(uniforms,0,0,0); |
264 |
effect.apply(matrix, uniforms, 0); |
|
266 |
effect.apply(matrixP, matrixV, uniforms, 0);
|
|
265 | 267 |
|
266 | 268 |
for(int i=0; i<numComp; i++) |
267 | 269 |
{ |
... | ... | |
270 | 272 |
|
271 | 273 |
if( (andAssoc & mAndAssociation[i]) != 0 || (equAssoc == mEquAssociation[i]) ) |
272 | 274 |
{ |
273 |
applyMatrixToComponent(matrix,start,end);
|
|
275 |
applyMatrixToComponent(matrixP, matrixV, start, end);
|
|
274 | 276 |
} |
275 | 277 |
} |
276 | 278 |
|
... | ... | |
279 | 281 |
|
280 | 282 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
281 | 283 |
|
282 |
private void applyMatrixToComponent(float[] matrix, int start, int end) |
|
284 |
private void applyMatrixToComponent(float[] matrixP, float[] matrixV, int start, int end)
|
|
283 | 285 |
{ |
284 | 286 |
float x,y,z; |
285 | 287 |
|
... | ... | |
289 | 291 |
y = mVertAttribs1[index+POS_ATTRIB+1]; |
290 | 292 |
z = mVertAttribs1[index+POS_ATTRIB+2]; |
291 | 293 |
|
292 |
mVertAttribs1[index+POS_ATTRIB ] = matrix[0]*x + matrix[4]*y + matrix[ 8]*z + matrix[12];
|
|
293 |
mVertAttribs1[index+POS_ATTRIB+1] = matrix[1]*x + matrix[5]*y + matrix[ 9]*z + matrix[13];
|
|
294 |
mVertAttribs1[index+POS_ATTRIB+2] = matrix[2]*x + matrix[6]*y + matrix[10]*z + matrix[14];
|
|
294 |
mVertAttribs1[index+POS_ATTRIB ] = matrixP[0]*x + matrixP[4]*y + matrixP[ 8]*z + matrixP[12];
|
|
295 |
mVertAttribs1[index+POS_ATTRIB+1] = matrixP[1]*x + matrixP[5]*y + matrixP[ 9]*z + matrixP[13];
|
|
296 |
mVertAttribs1[index+POS_ATTRIB+2] = matrixP[2]*x + matrixP[6]*y + matrixP[10]*z + matrixP[14];
|
|
295 | 297 |
|
296 | 298 |
x = mVertAttribs1[index+NOR_ATTRIB ]; |
297 | 299 |
y = mVertAttribs1[index+NOR_ATTRIB+1]; |
298 | 300 |
z = mVertAttribs1[index+NOR_ATTRIB+2]; |
299 | 301 |
|
300 |
mVertAttribs1[index+NOR_ATTRIB ] = matrix[0]*x + matrix[4]*y + matrix[ 8]*z; |
|
301 |
mVertAttribs1[index+NOR_ATTRIB+1] = matrix[1]*x + matrix[5]*y + matrix[ 9]*z; |
|
302 |
mVertAttribs1[index+NOR_ATTRIB+2] = matrix[2]*x + matrix[6]*y + matrix[10]*z; |
|
302 |
mVertAttribs1[index+NOR_ATTRIB ] = matrixV[0]*x + matrixV[4]*y + matrixV[ 8]*z; |
|
303 |
mVertAttribs1[index+NOR_ATTRIB+1] = matrixV[1]*x + matrixV[5]*y + matrixV[ 9]*z; |
|
304 |
mVertAttribs1[index+NOR_ATTRIB+2] = matrixV[2]*x + matrixV[6]*y + matrixV[10]*z; |
|
305 |
|
|
306 |
x = mVertAttribs1[index+NOR_ATTRIB ]; |
|
307 |
y = mVertAttribs1[index+NOR_ATTRIB+1]; |
|
308 |
z = mVertAttribs1[index+NOR_ATTRIB+2]; |
|
309 |
|
|
310 |
float len1 = (float)Math.sqrt(x*x + y*y + z*z); |
|
311 |
|
|
312 |
if( len1>0.0f ) |
|
313 |
{ |
|
314 |
mVertAttribs1[index+NOR_ATTRIB ] /= len1; |
|
315 |
mVertAttribs1[index+NOR_ATTRIB+1] /= len1; |
|
316 |
mVertAttribs1[index+NOR_ATTRIB+2] /= len1; |
|
317 |
} |
|
303 | 318 |
|
304 | 319 |
x = mVertAttribs1[index+INF_ATTRIB ]; |
305 | 320 |
y = mVertAttribs1[index+INF_ATTRIB+1]; |
306 | 321 |
z = mVertAttribs1[index+INF_ATTRIB+2]; |
307 | 322 |
|
308 |
mVertAttribs1[index+INF_ATTRIB ] = matrix[0]*x + matrix[4]*y + matrix[ 8]*z; |
|
309 |
mVertAttribs1[index+INF_ATTRIB+1] = matrix[1]*x + matrix[5]*y + matrix[ 9]*z; |
|
310 |
mVertAttribs1[index+INF_ATTRIB+2] = matrix[2]*x + matrix[6]*y + matrix[10]*z; |
|
323 |
mVertAttribs1[index+INF_ATTRIB ] = matrixV[0]*x + matrixV[4]*y + matrixV[ 8]*z; |
|
324 |
mVertAttribs1[index+INF_ATTRIB+1] = matrixV[1]*x + matrixV[5]*y + matrixV[ 9]*z; |
|
325 |
mVertAttribs1[index+INF_ATTRIB+2] = matrixV[2]*x + matrixV[6]*y + matrixV[10]*z; |
|
326 |
|
|
327 |
x = mVertAttribs1[index+INF_ATTRIB ]; |
|
328 |
y = mVertAttribs1[index+INF_ATTRIB+1]; |
|
329 |
z = mVertAttribs1[index+INF_ATTRIB+2]; |
|
330 |
|
|
331 |
float len2 = (float)Math.sqrt(x*x + y*y + z*z); |
|
332 |
|
|
333 |
if( len2>0.0f ) |
|
334 |
{ |
|
335 |
mVertAttribs1[index+INF_ATTRIB ] /= len2; |
|
336 |
mVertAttribs1[index+INF_ATTRIB+1] /= len2; |
|
337 |
mVertAttribs1[index+INF_ATTRIB+2] /= len2; |
|
338 |
} |
|
311 | 339 |
} |
312 | 340 |
} |
313 | 341 |
|
Also available in: Unified diff
Fix normals in case of MatrixEffectScale / Shear.
Fix displaying the normal vector.