Revision 62c869ad
Added by Leszek Koltunski over 3 years ago
src/main/java/org/distorted/library/effect/MatrixEffectShear.java | ||
---|---|---|
46 | 46 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
47 | 47 |
/** |
48 | 48 |
* Only for use by the library itself. |
49 |
* <p> |
|
50 |
* Here and in Shear we have the whole reason why there are two separate 'P' and 'V' (Point and |
|
51 |
* Vector) matrices - Scale and Shear have to manipulate Points and Normal Vectors differently. |
|
49 | 52 |
* |
50 | 53 |
* @y.exclude |
51 | 54 |
*/ |
52 |
public void apply(float[] matrix, float[] uniforms, int index) |
|
55 |
public void apply(float[] matrixP, float[] matrixV, float[] uniforms, int index)
|
|
53 | 56 |
{ |
54 | 57 |
float sx = uniforms[NUM_UNIFORMS*index ]; |
55 | 58 |
float sy = uniforms[NUM_UNIFORMS*index+1]; |
... | ... | |
59 | 62 |
float y = uniforms[NUM_UNIFORMS*index+CENTER_OFFSET+1]; |
60 | 63 |
float z = uniforms[NUM_UNIFORMS*index+CENTER_OFFSET+2]; |
61 | 64 |
|
62 |
Matrix.translateM(matrix, 0, x, y, z); |
|
65 |
Matrix.translateM(matrixP, 0, x, y, z);
|
|
63 | 66 |
|
64 |
matrix[4] += sx*matrix[0]; // Multiply viewMatrix by 1 x 0 0 , i.e. X-shear.
|
|
65 |
matrix[5] += sx*matrix[1]; // 0 1 0 0
|
|
66 |
matrix[6] += sx*matrix[2]; // 0 0 1 0
|
|
67 |
matrix[7] += sx*matrix[3]; // 0 0 0 1
|
|
67 |
matrixP[4] += sx*matrixP[0]; // Multiply viewMatrix by 1 x 0 0 , i.e. X-shear.
|
|
68 |
matrixP[5] += sx*matrixP[1]; // 0 1 0 0
|
|
69 |
matrixP[6] += sx*matrixP[2]; // 0 0 1 0
|
|
70 |
matrixP[7] += sx*matrixP[3]; // 0 0 0 1
|
|
68 | 71 |
|
69 |
matrix[0] += sy*matrix[4]; // Multiply viewMatrix by 1 0 0 0 , i.e. Y-shear.
|
|
70 |
matrix[1] += sy*matrix[5]; // y 1 0 0
|
|
71 |
matrix[2] += sy*matrix[6]; // 0 0 1 0
|
|
72 |
matrix[3] += sy*matrix[7]; // 0 0 0 1
|
|
72 |
matrixP[0] += sy*matrixP[4]; // Multiply viewMatrix by 1 0 0 0 , i.e. Y-shear.
|
|
73 |
matrixP[1] += sy*matrixP[5]; // y 1 0 0
|
|
74 |
matrixP[2] += sy*matrixP[6]; // 0 0 1 0
|
|
75 |
matrixP[3] += sy*matrixP[7]; // 0 0 0 1
|
|
73 | 76 |
|
74 |
matrix[4] += sz*matrix[8]; // Multiply viewMatrix by 1 0 0 0 , i.e. Z-shear.
|
|
75 |
matrix[5] += sz*matrix[9]; // 0 1 0 0
|
|
76 |
matrix[6] += sz*matrix[10];// 0 z 1 0
|
|
77 |
matrix[7] += sz*matrix[11];// 0 0 0 1
|
|
77 |
matrixP[4] += sz*matrixP[8]; // Multiply viewMatrix by 1 0 0 0 , i.e. Z-shear.
|
|
78 |
matrixP[5] += sz*matrixP[9]; // 0 1 0 0
|
|
79 |
matrixP[6] += sz*matrixP[10];// 0 z 1 0
|
|
80 |
matrixP[7] += sz*matrixP[11];// 0 0 0 1
|
|
78 | 81 |
|
79 |
Matrix.translateM(matrix, 0,-x,-y,-z); |
|
82 |
Matrix.translateM(matrixP, 0,-x,-y,-z); |
|
83 |
|
|
84 |
Matrix.translateM(matrixV, 0, x, y, z); |
|
85 |
|
|
86 |
matrixV[0] -= sx*matrixV[4]; // Multiply viewMatrix by 1 0 0 0 , i.e. vector X-shear. |
|
87 |
matrixV[1] -= sx*matrixV[5]; // -x 1 0 0 |
|
88 |
matrixV[2] -= sx*matrixV[6]; // 0 0 1 0 |
|
89 |
matrixV[3] -= sx*matrixV[7]; // 0 0 0 1 |
|
90 |
|
|
91 |
matrixV[4] -= sy*matrixV[0]; // Multiply viewMatrix by 1-y 0 0 , i.e. vector Y-shear. |
|
92 |
matrixV[5] -= sy*matrixV[1]; // 0 1 0 0 |
|
93 |
matrixV[6] -= sy*matrixV[2]; // 0 0 1 0 |
|
94 |
matrixV[7] -= sy*matrixV[3]; // 0 0 0 1 |
|
95 |
|
|
96 |
matrixV[8] -= sz*matrixV[4]; // Multiply viewMatrix by 1 0 0 0 , i.e. vector Z-shear. |
|
97 |
matrixV[9] -= sz*matrixV[5]; // 0 1-z 0 |
|
98 |
matrixV[10]-= sz*matrixV[6]; // 0 0 1 0 |
|
99 |
matrixV[11]-= sz*matrixV[7]; // 0 0 0 1 |
|
100 |
|
|
101 |
Matrix.translateM(matrixV, 0,-x,-y,-z); |
|
80 | 102 |
} |
81 | 103 |
|
82 | 104 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
Also available in: Unified diff
Fix normals in case of MatrixEffectScale / Shear.
Fix displaying the normal vector.