equipment:8 ball pool is played with a set of 15 object ... web viewpool, also more formally known...

17
Ma 1 3D Pool Simulation Jia Ming Simon Ma CMPS 162 Final Project

Upload: halien

Post on 06-Feb-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Equipment:8 ball pool is played with a set of 15 object ... Web viewPool, also more formally known as pocket, is the family of cue sports and games played on a pool table having six

Ma 1

3D Pool Simulation

Jia Ming Simon Ma

CMPS 162

Final Project

Table of Contents

Page 2: Equipment:8 ball pool is played with a set of 15 object ... Web viewPool, also more formally known as pocket, is the family of cue sports and games played on a pool table having six

Ma 2

Abstract and history---------------------------------------------------------------- 3 ~ 4

Introduction -------------------------------------------------------------------------- 4~5

How to Use-----------------------------------------------------------------------------5~ 6

Physics implementation ------------------------------------------------------------- 6~8

Implementation detail-------------------------------------------------------------- 8~9

Result ----------------------------------------------------------------------------------9~10

Conclusion and problem ----------------------------------------------------------- 11

Reference ---------------------------------------------------------------------------- 12

Abstract and history

Page 3: Equipment:8 ball pool is played with a set of 15 object ... Web viewPool, also more formally known as pocket, is the family of cue sports and games played on a pool table having six

Ma 3

Pool, also more formally known as pocket, is the family of cue sports and games

played on a pool table having six receptacles called pockets along the rails, into which

balls are deposited as the main goal of play. Popular versions include eight-ball and

nine-ball.

The History of billiards is long and very rich. The game has been played by kings

and commoners, presidents, mental patients, ladies, gentlemen, and hustlers alike. It

evolved from a lawn game similar to the croquet played some-time during the 15th

century in Northern Europe and probably in France. Play moved indoors to a wooden

table with green cloth to simulate grass,

and a simple border was placed around

the edges. The balls were shoved, rather

than struck, with wooden sticks called

"maces." The term "billiard" is derived

from French, either from the word "billart", one of the wooden sticks, or "bille", a ball.

In the United States, though the original "pool" game was played on a pocketless

carom billiards table, the term later stuck to all new games of pocket billiards as the

sport gained in popularity, and so outside the cue sports industry, which has long

favored the more formal term pocket billiards, pool has remained the common name for

the sport.

There are hundreds of pool games. Some of the more well known include eight-ball,

nine-ball, ten-ball, straight pool, and one-pocket.

Figure 1: Michael Phelan's Billiard Saloon[1]

Page 4: Equipment:8 ball pool is played with a set of 15 object ... Web viewPool, also more formally known as pocket, is the family of cue sports and games played on a pool table having six

Ma 4

There are also hybrid games combining aspects of both pool and carom billiards, such as

American four-ball billiards, cowboy pool and bottle pool.[2]

Introduction

This project is going to simulate a Eight-ball pool game.

8 ball pool is the most popular billiard game in the world and one of the most

popular games in the US. Being the least difficult pool game, 8 ball pool is commonly

played by professionals as well as by amateurs and recreational players.

Equipment:8 ball pool is played with a set of 15 object balls divided into two

groups of solid colored balls and striped balls. Each player is assigned a group of object

balls.

Game Objectives : The objective of the game is to sink the 8-ball in a pocket after

sinking the entire group of object balls.

BCA 9 Ball Pool Rules : According to the BCA 8 ball pool rules, the game begins

with an opening break shot, which its purpose is to break open the rack of balls. The

player who was chosen to break open the game is required to send an object ball to a

pocket or cause at least four object balls to hit the cushions. In 8 ball pool, as long as a

player succeeds in making a legal shot, he is entitled to continue shooting at the table. A

Page 5: Equipment:8 ball pool is played with a set of 15 object ... Web viewPool, also more formally known as pocket, is the family of cue sports and games played on a pool table having six

Ma 5

failure in making a legal shot, also known as foul, leads to a switch of turns between the

players.

Choice of Group of Object Balls : The choice of group of balls is made after the

opening break shot with the first legally pocketed object ball. From that point and on,

the players may pocket only the assigned group of object balls, otherwise it is a foul.

Pocketing the 8-Ball :The first player who had pocketed his assigned group of

object balls can try to pocket the 8-ball. Before shooting the 8-ball, the player has to

announce a certain pocket. Pocketing the 8-ball to a different pocket than the

announced one is a foul. If the 8-ball has been pocketed to the announced pocket, the

shooting player wins the game.[3]

In my program, the groups of balls are simply divided into two color group

instead of strip and solid.

How to Use

This program REQUIRES : GLUT library, C++ compiler (Visual C++ 2011 tested).

1) Start the program, all the pool balls are already put in the correct position. In

case of starting a new game, press 'x' button,

and everything will be reset.

2) Press 'c' button to switch between "Top view"

and "Behind the white ball view". Hold the right

mouse button and move the mouse to rotate the

Figure 2 : Behind the white ball view

Page 6: Equipment:8 ball pool is played with a set of 15 object ... Web viewPool, also more formally known as pocket, is the family of cue sports and games played on a pool table having six

Figure 3 : Behind the white ball view

Ma 6

camera in "Behind the white ball view mode". Hold the middle mouse button

and move up or down to zoom in or out.

3) click on the white ball in "Top View" mode (if click left mouse button in "Behind

the white ball view", it will automatically switch

to "Top view" mode) with left mouse button, hold

it and drag back. The yellow dash line represents

the direction of white ball if you release the left

button now. The more you drag back, the more

powerful this release is.

4) If foul happens, the other user is able to move the white ball with arrow keys,

and submit the position by pressing 'F1' button.

Physics implementation

Ball movement:

Poll ball movement can be considered as a regular 2D motion with constant

acceleration or deceleration. Since the friction affects to pool balls are "rolling friction",

the friction is not constant. In my program, I simply subtract 1/10 of the velocity, and set

the velocity to 0 when the magnitude of velocity is very close to 0.

The acceleration, velocity, and time relationship for 2D motion is :

V (t )=V (0 )+a∗t

where V(t) is the current velocity, V(0) is the initial velocity, a is the acceleration, and t is

the time. And based on my ideas, V (n+1 )=V (n )∗(0.9) for every 10 milliseconds.

Page 7: Equipment:8 ball pool is played with a set of 15 object ... Web viewPool, also more formally known as pocket, is the family of cue sports and games played on a pool table having six

Figure 4 : Reflection

Ma 7

Rolling effect:

In the real world, the ball is rolling but not sliding. In order to represent this I am

going to use quaternion on each pool ball. The matrix is :

1-2y2-2z2 2xy-2wz 2xz+2wy 0

2xy+2wz 1-2x2-2z2 2yz+2wx 0

2xz-2wy 2yz-2wx 1-2x2-2y2 0

0 0 0 1

w = cosf( fAngle/2) x = axis.x * sinf( fAngle/2 ) y = axis.y * sinf( fAngle/2 )

z = axis.z * sinf( fAngle/2 )

So, by multiplying this matrix with any current matrix to rotate a object around any axis

to represents the rolling of ball.

Collision:

Reflection :

Reflection happens when a pool ball hit

the side edge cushions. Reflection ideally

doesn't change the magnitude of velocity, but

only reverses one of its velocity component.

For example, if a ball hit the top cushion as the figure on the right shows, the X

component of velocity remains and reverse the Y component. The resulting velocity is

Page 8: Equipment:8 ball pool is played with a set of 15 object ... Web viewPool, also more formally known as pocket, is the family of cue sports and games played on a pool table having six

Figure 5 : Ball collision

Ma 8

the velocity when pool ball bounces back. So, for the reflection happens on side edges,

flip the x component; for reflection happens on top or bottom edges, flip the z

component.

Ball collision :

When one pool ball hits another ball, the velocity

of both balls change. Based on the conservation of

momentum equation "m1v1i + m2v2i = m1v1f + m2v2f " , the

mass are all equal, so the velocity equation becomes : v1i

+ v2i = v1f + v2f. The easiest way to calculate the final

velocity is to break the velocity into two components.

One component is along the connected line between two centers of balls; the other one

is perpendicular to it. When the collision happens, swaps the components along the

center connection, and then the sum of two components of one ball is its velocity.

Implementation detail

My goal is to implement a program to simulate a pool game in 3D. Due to the

limitation of time, I decided to make the program works first. In other words, I will

simply draw the table and balls. After the program runs, I can start implementing the

physics effect including collision, reflection, and position changing. Eventually, set the

rules for pocket and foul.

Page 9: Equipment:8 ball pool is played with a set of 15 object ... Web viewPool, also more formally known as pocket, is the family of cue sports and games played on a pool table having six

Figure 6 : initial screen of running program

Ma 9

The second step is to add more detail into the program. The first thing to

implement is the rolling effect of each poll ball. The pool balls are rolling instead of

sliding in real life. The solution to this is to rotate the coordinate before each rendering,

and pop the original matrix back after rendering. The second improvement is to add

more polygons when drawing the pool table.

Result

Since the time is really limited, I was not able to implement all the features.

However, the basic program is working perfectly, and the physics calculation correct

besides the rolling effect. Here are

some actual screenshot of running

program.

Page 10: Equipment:8 ball pool is played with a set of 15 object ... Web viewPool, also more formally known as pocket, is the family of cue sports and games played on a pool table having six

Figure 7 : Top view mode/ break shot

Figure 8 : Screenshot

Ma 10

Conclusion and problem

Page 11: Equipment:8 ball pool is played with a set of 15 object ... Web viewPool, also more formally known as pocket, is the family of cue sports and games played on a pool table having six

Ma 11

This program is running good with corrected physical collision. The ball will be

identified as pocketed if it hits the pocket position. However, this program is not

perfectly finished yet.

The first problem is the animation. I was initially using FLTK and GLUT library for

this program. I was thinking to have a GUI for user to control how the program runs

easier. But the animation control of FLTK is much different from original GLUT, and I was

having a big problem when I was doing assignment 2's animation. So I decided to get rid

of FLTK, and use GLUT as my platform. As the result of this, it took me several days to

convert all the code I wrote in FLTK to GLUT.

The second problem is the rolling effect. I totally understand the concept of

quaternion, and I was planning to use it for ball rolling effect. However, the matrix

calculation and the conversation from concept to reality cost me a lot of time. And due

to the limited time, I had to give up implement this even though I almost finished.

Eventually, I used traditional glRotate() method to get the ball rolling effect correctly.

The lat problem is the shooting control. Currently, the shooting is forced to be in

"top view mode". But what I want is a way of shooting way that can be performed in

both "top view mode" or "behind the white ball mode".

Hopefully I am able to fix all those problems in the future, and make this

program perfect.

Reference

Page 12: Equipment:8 ball pool is played with a set of 15 object ... Web viewPool, also more formally known as pocket, is the family of cue sports and games played on a pool table having six

Ma 12

[1]. Phelan, Michael. Michael Phelan's Billiard Saloon. 1859. Photograph. New York Public

Library Picture, New York.

[2]. "History Of Pool." The History of Pool, Billiards, English Billiards, Snooker, Eight-Ball, Cue

Stick, Billiard Congress of America â“ The� Billiard Shop. N.p., n.d. Web. 09 June 2012.

<http://www.thebilliardshop.com/history-of-pool-and-billiards>.

[3]. "8 Ball Pool Background & Rules." 8 Ball Pool Background & Rules. N.p., n.d. Web. 09

June 2012. <http://www.play89.com/8BallPoolBackground.html>.