MIME-Version: 1.0 Server: CERN/3.0 Date: Monday, 06-Jan-97 20:32:31 GMT Content-Type: text/html Content-Length: 3662 Last-Modified: Monday, 21-Oct-96 23:59:06 GMT Program 2 - Interactive Hierarchical Modeling using Mesa

Program 2 - Interactive Hierarchical Modeling using Mesa

Due - November 14

You are to create an industrial-style robot arm similar to that in the picture above and a user interface which can be used to interactively control the arm. You should also create a cube that can be picked up by the arm when both fingers of the arm are touching opposite faces of the cube. You will create the robot arm as a hierarchical model based on only a few simple base primitives (perhaps only a cylinder). You will use Mesa to control the viewing (camera) parameters and the lighting and material properties of the robot. The robot should be rendered as a set of opaque closed objects, so your primitives will consist of filled surfaces and you will use back face culling and z-buffer based hidden surface removal for display. Your lighting should be designed carefully to make the three dimensional shape of the robot clear. You must use at least lambertian flat shading for the surfaces, you may choose to add smooth shading and specular lighting as well, but do not overdo the lighting at the expense of interaction speed. The number of light sources used is also your choice.

Your model should be structured along the lines of the picture and should have the degrees of freedom indicated. Cylinder B should rotate about the common axis it shares with the base A. The rest of the arm should rotate with B. C should be fixed with respect to B except that it too can rotate about its axis. D should be fixed with respect to C. E should be able to translate along the common axis it shares with D and also rotate about its axis. F should be fixed with respect to E and G and H should pivot about the ends of F so they can be used to grasp things.

Both the base of the robot and the movable cube will initially sit on a common table plane. The cube should be positioned randomly within the reach of the arm.

The user interface of your program should have a mode in which the mouse can be used to move the viewing position with respect to the world containing the robot arm and cube. You should also have a mode for controlling the arm. In arm control mode, when the left mouse button is pressed, sideways motion of the mouse should rotate B and forward and back rotation of the mouse should rotate C. When the middle button is held, sideways mouse motion should rotate E and back and forth motion should translate E. The left and right arrow keys should always open and close the fingers. The right mouse button should exit the mode or bring up a menu. In viewing mode, when the left mouse button is held down, sidways mouse motion should move the observer longitudinally about an imaginary sphere centered on the robot arm and back and forth motion should move the view latitudinally. With the middle mouse button down, mouse motions should lengthen and shorten the radius of the imaginary sphere. The right button should behave as in arm control mode. You should also be able to reset the robot arm to its initial configuration.

Your user interface should be implemented using GLUT, the toolkit included for this purpose with our Mesa installation. You can get a head start on this project by looking at pages 113-116 in the OpenGL Programmer's Guide and at the GLUT Walker demo in /p/src/Mesa-1.2.6/GLUT/progs/demos/walker (this is /p/src/Mesa-1.2.8/progs/demos/walker in the lab). Good luck and have fun!