commit beb70e07355c8e3aeb8aaccce5982e2339d48c72
Author: Leszek Koltunski <leszek@distorted.org>
Date:   Sun Jul 17 22:43:49 2016 +0100

    Fix for Bug #21: implement z-shear.

diff --git a/src/main/java/org/distorted/library/EffectQueueMatrix.java b/src/main/java/org/distorted/library/EffectQueueMatrix.java
index 976ed7b..63ab5aa 100644
--- a/src/main/java/org/distorted/library/EffectQueueMatrix.java
+++ b/src/main/java/org/distorted/library/EffectQueueMatrix.java
@@ -208,18 +208,21 @@ class EffectQueueMatrix extends EffectQueue
 
         Matrix.translateM(viewMatrix, 0, x,-y, z); 
       
-        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.
+        viewMatrix[4] += sx*viewMatrix[0]; // Multiply viewMatrix by 1 x 0 0 , i.e. X-shear.
         viewMatrix[5] += sx*viewMatrix[1]; //                        0 1 0 0 
         viewMatrix[6] += sx*viewMatrix[2]; //                        0 0 1 0
         viewMatrix[7] += sx*viewMatrix[3]; //                        0 0 0 1
       
-        viewMatrix[0] += sy*viewMatrix[4]; // Multiply viewMatrix by 1 0 0 0 , i.e. Y-shear. TODO: change this so it is symmetric w respect to all the axis.
+        viewMatrix[0] += sy*viewMatrix[4]; // Multiply viewMatrix by 1 0 0 0 , i.e. Y-shear.
         viewMatrix[1] += sy*viewMatrix[5]; //                        y 1 0 0
         viewMatrix[2] += sy*viewMatrix[6]; //                        0 0 1 0
         viewMatrix[3] += sy*viewMatrix[7]; //                        0 0 0 1      
       
-        // TODO: implement Z-shear.
-        
+        viewMatrix[4] += sz*viewMatrix[8]; // Multiply viewMatrix by 1 0 0 0 , i.e. Z-shear.
+        viewMatrix[5] += sz*viewMatrix[9]; //                        0 1 0 0
+        viewMatrix[6] += sz*viewMatrix[10];//                        0 z 1 0
+        viewMatrix[7] += sz*viewMatrix[11];//                        0 0 0 1
+
         Matrix.translateM(viewMatrix, 0,-x, y, -z);
         }
       }
