Let's play pool on the Responsive Workbench! (tm) Robert Laddish, Cyprien Godard, Alan Steremberg Introduction: Our project is to produce a 3D virtual pool table on the responsive workbench. We are planning on using a physical cue which extends to a virtual cue over the table. The playing field will be above the surface of the workbench and inset from the sides to extend the 3D illusion to the entire virtual pool table. This will give room to display 3D imagery from strange angles and display the virtual cue. This project proposal has been broken down into the following sections: Team Functional Breakdown 1. Physics: [ Cyprien ] 2. Visuals: [ Rob ] 3. Game dynamics [ ??? ] 4. Tracking: head and cue. [ Alan ] Progress Time-line Team: Our development team consists of the following people: Alan Steremberg alans@xenon Cyprien Godard cyp@cs Robert Laddish robl@leland Functional Breakdown: We've broken our project down into 4 functional areas: physics, visuals, game dynamics, and tracking. 1. Physics: [ Cyprien ] We would like to model each ball as it's own object, and model the interaction between them separately. For each ball, we will have to take into account mass, velocity, center of inertia, acceleration, point of contact to the ground. When two balls collide we will have to compute the new directions and velocities of the balls after collision. We will have to find the position at which the cue hit the ball and find a paradigm for the contact cue-ball. We will also have to model friction so the balls do not continue to roll forever. We will implement a 3D collision detection package between the balls and between the balls and the bumpers and between the cue and the bumpers and the balls. Initially we might do a simple 2D physics package, and not allow the cue to cause the cue ball to jump. If this runs quickly enough, we will attempt to model other 3D parameters, and allow the cue-ball to jump off of the table. Marc suggested that we find a 3D physics package, but Berndt thought that we wouldn't be able to find one that ran in real time and that we would have to implement it ourselves. We will check with some key people from the Robotics lab first, and if no package can be found, we will implement our own. 2. Visuals: [ Rob ] We would like to be able to display the pool table as well as the moving balls in 3D using the workbench libraries. For the mock demo, each ball will have a different color. After this is achieved, we will add texture (color + numbers) and shadows. Likewise, the virtual cue, the corners of the table, and the pockets will be textured and shadowed as well. The pool table will have to be of the correct aspect ratio, and the balls, cue, sides, and pockets will likewise have correct dimensions. As noted in the game dynamics section, we will allow the pool table to be rotated. The virtual table will have to be inset from the RWB side to allow side features to retain their 3D appearance from most angles. It will also allow us to extend the physical cue as a virtual one. Berndt claimed that the 3D effect would be better above the table, and this will help prevent scratching the tables surface with the physical cue. Marc claimed that it would be better to render the table below the surface. It is worth noting that some pool players place the cue between the knuckles of one of their hands for stability. This will be very difficult to do if the virtual surface is above the RWB table, and impossible if the virtual cue needs to be placed between the knuckles. We plan to very the height and the length of the virtual cue to achieve optimal playability. We expect problems due to the graphics redraw rate of fast moving balls. If the physical cue is allowed to obstruct the RWB, there may be undesirable side effect. 3. Game dynamics [ ??? ] The game dynamics will take care of setting up the board, telling players to alternate, detecting winning conditions, and presenting different games of pool to be played to the users. It will detect "scratch" balls and allow the user to reposition them on the table. For the mockup, we will not demo any particular game, and allow users to take balls from pockets and place them anywhere on the board they wish. Because the transmitter is at a fixed location, we will also need to allow the user to rotate the table. This may be limited to 180 degree rotations only to maximize the virtual table size. We may allow users to save & reload games as well. 4. Tracking: head and cue. [ Alan ] We will be tracking the users head with the crystal eyes glasses, and we will track the end of the physical cue with a polhemus sensor. Initially, we will use the sensor without the physical cue. The main problem we expect to run into is lag of reading the sensors and updating the display. This may not be much of a problem when orienting the virtual cue, but hitting the cue ball is a fast action motion. One possible workaround is to implement a virtual slider used to select the force of the cue when it hits the ball. Our original idea was to perform numerical differentiation to achieve a guess at acceleration to compute the force, but this may not be possible. We also expect some placement errors between the physical and virtual cues.