My final project integrates both the leap motion and the zSpace into the world builder scene. The zSpace is used for displaying the world builder scene and it also is able to draw objects with the stylus. The Leap is used to rotate and zoom in and out of the object. The combination of these two controllers allows the user to more efficiently interact with the object that is drawn.
Looking through my old posts was encouraging because it showed the progress that was made through out the semester. Overall I am happy with the results of my project and have learned a lot this semester.
One of the largest obstacles that I had was getting the tracking to work correctly with the Z Space stylus. The first route I went was to programmatically fix this problem. I needed to find a way to calculate the rotation of the stylus so that it would update correctly on each frame. I turned to quaternions and soon found out that this approach was too complicated and would take some time to complete. Luckily, VRPN supports zSpace so this fixed the problem with the stylus tracking. The next problem was to find out why the stylus was not drawing on the screen. This was fixed by trial and error within the finona config file.
Another obstacle that I faced was to have the world builder scene run independently from the skeletal viewer. The reason for this was because the skeletal viewer needed to start before the world builder scene and running these two applications every time an edit was made took some time. The Leap Motion was also dependent upon the Skeletal Viewer which was annoying because I had to select the skeletal viewer before I would see my hands on the screen. To fix this problem I moved all of the code for the leap motion into the world builder scene. This had to be done carefully because much of the code is scattered across the code base and it caused several files to be edited in order for the conversion to work.
My most recent obstacle was getting the rotation set up for the leap motion. My goal was to get the leap motion to detect the angle of my hand and to rotate the world accordingly. This required some knowledge on how the FinonaLib orients the camera when using the wand. Basically I spoofed this idea and made it work with the leap motion. Currently you activate gestures by placing 5 fingers above the leap motion. Next you can either close your hand and pull in or out to simulate zooming, use one finger to rotate around the x-axis, and use two fingers to rotate around the y-axis. You can stop all of these gestures by placing fingers above the leap motion again.
If I had more time I would make a gesture to reset the camera to its original position. I believe this would help when the user makes a mistake when rotating the object. I would also like to be able to change the colors of the 3D object either by voice or by some type of gesture.