Added beginnings of touch screen interaction.
Got rotation working.  Multiple touches not working, probably because drag mode decided on first touch, and multiple touches aren't usually exactly simultaneous.
Fixed: one of the cubes had vertices specified in clockwise order, this was fixed by rewriting using xyz as labels, which made it easier to check what was going on.
Merge branch 'fix_cube' into touch_screen_rudimentary

Conflict was manually resolved.
Better lighting direction, now that cube vertex order is fixed.
Merge branch 'fix_cube' into touch_screen_rudimentary

Improved light direction, now that cube vertex ordering is fixed.
Previously, the translate/rotate drag behaviour was decided as the drag started, now it is revised every time, allowing switching from rotate to translate XY or XZ just by changing from pressing ALT/CTRL/SHIFT or no key.

Vaguely working: multitouch for translate: 2 touch drag: xy, 3 touch drag xz. Rotate is just 1 touch drag.  Interferes with default multitouch gestures for scrolling and zooming though.
Fixed: (sort of) issue where touch coordinates were taken from head of list instead of tracking a particular touch id.
Trying to fix issue where rotation/translation by touching suddenly jumps because touch processing isn't perfect.

Two measures taken here:
1) Track the touch ID to use as the main pointer position, other touches just provide the touch count.  (Note, pinch or twist action ignored, but would be nice to add later).
2) In the case where the main touch is lost, revert back to head of touches list, probably might be a jump in rotation/translation.

There still seems to be an issue where manipulation locks up or gets stuck in one of the modes.
Merge branch 'master' of https://github.com/A1kmm/webgl_pca into touch_screen_rudimentary

Conflicts resolved manually: Main.elm
Manipulation a bit like cmgui/Zinc, where circumferential dragging mainly rotates around axis towards viewer.
Fixed problem where mouse motion dragged out of canvas causes rotations to reverse direction.
Doubling the rotation rate.
Using "pureMain" applicative style to make debug displays etc. easier (following Andrew's advice).
Added debug text showing keys down.  Shows that dragging bug is appears to be a bug in Elm, where Alt lifted before drag finished leads to one of the touches becoming persistent. Similar for CTRL on MacOS where it causes a popup menu to interfere.
Removed debug code and moved camera initially closer to cube.
Reversed commit fe8d5ef546e2263d1ced610f773d9ae01d04e8be on WebGLScene.js, and flipped the lighting direction.
This fixes lighting bug, and starts with a more natural lighting direction.
Now using projection of change vector onto position radius vector via dot product to set phi,theta components of infinitesimal rotation increment.

Have retained debug code, will remove on next commit.
Removed debug code.
Euler to quaternion for small angles (approximate cos as 1 and sin x as x).  Will revert on next commit, just wanted to keep a record of this experiment, which worked fine, since dragging callbacks happen so frequently, angles are always small.