Lecture 6

64
LECTURE 6 Announcements

description

Lecture 6. Announcements. Next week will be great!. Three major things are happening next week: Zynga guest lecture Your game pitches (more details later) Christina Paxson. Feedback for M 1. Some of you had stacking shapes The stack probably exploded eventually - PowerPoint PPT Presentation

Transcript of Lecture 6

Page 1: Lecture 6

LECTURE 6Announcements

Page 2: Lecture 6

Next week will be great!• Three major things

are happening next week:– Zynga guest lecture– Your game pitches

(more details later)– Christina Paxson

Page 3: Lecture 6

Feedback for M 1• Some of you had stacking

shapes• The stack probably

exploded eventually• Don’t worry, stacking

boxes is hard to do properly

• This week’s lecture will help but not alleviate the problem

Page 4: Lecture 6

Feedback for M 1• Sometimes shapes

would settle overlapping other shapes

• Two possible causes:– Not translating enough– Doing collision response

before integration, hence drawing before translating

Page 5: Lecture 6

QUESTIONS?Announcements

Page 6: Lecture 6

LECTURE 6Physics II

Page 7: Lecture 6

M1 Collision Response• You obtained MTV in M1, how did

you use it?– Move things out of collision– Apply some impulse along MTV– It probably worked most of the time, or

only if you modeled specific behavior– Other times the response is weird

Page 8: Lecture 6

Controlling Impulse• Want more realistic

collisions• Two things to do:– Support a range of

collision behavior– Determine the physically

correct collision result

• Also need to be able to code it

void onCollide(Collision col) { Shape o1 = col.shape1; Shape o2 = col.shape2; Vec2f mtv = col.mtv; o1.move(mtv.smult(0.5f)); o2.move(mtv.smult(-0.5f)); //code to calculate impulse

o1.applyImpulse(imp1); o2.applyImpulse(imp2);}

Page 9: Lecture 6

Restitution• Property of physical

entities• Value between 0 and 1• 0 is perfectly inelastic, 1 is

perfectly elastic, etc.• The coefficient of

restitution (COR) between two entities is the geometric mean of their restitutions:

Page 10: Lecture 6

Correct Collisions• How do we find the

physically correct collision response?– i.e. given and ,

what are and ?

• Use physical definition of the COR:

𝑢𝑎 𝑢𝑏

𝑣𝑎 𝑣𝑏

Page 11: Lecture 6

Translation to Code• Once we determine what the

final velocities of the objects should, how do we apply this?

• Impulse or velocity setting?– Setting velocity affects other

collision response calculations

𝑣𝑟=1

𝑟=1

𝑟=1

Page 12: Lecture 6

Translation to Code• We determined what the final

velocities of the objects should, how do we apply this?

• Impulse > velocity setting– Setting velocity affects other

collision response calculations

𝑣

Page 13: Lecture 6

Translation to Code• We determined what the final

velocities of the objects should, how do we apply this?

• Impulse > velocity setting– Setting velocity affects other

collision response calculations

𝑣

Page 14: Lecture 6

Translation to Code• We determined the final

velocities of objects, what do we do with it?

• Impulse > velocity setting– Setting velocity affects other

collision response calculations

• Recall the definition of the impulse:

• We really want the difference of final and initial velocity

𝑣

Page 15: Lecture 6

Final Velocities• Conservation of momentum:

• The COR equation can be rewritten as

• So conservation of momentum becomes•

Page 16: Lecture 6

Final Velocities• Solving for :

• Similarly for (reverse and basically):

Page 17: Lecture 6

Velocity Difference• The velocity differences are:

Page 18: Lecture 6

Final Impulse• So the impulse you want to apply is:

• You can see that they are equal and opposite, as we would expect

Page 19: Lecture 6

Static Shapes• If object is static, you can show that the

equations in the last slide reduces to

• Vice-versa if object is static• You should special case this

Page 20: Lecture 6

Note about Velocity• Note that all velocities in

these equations are for the one-dimensional case

• But your 2D engine is 2D!• Velocity only changes in

the direction of the MTV• So the ’s and ’s in the

equations are the projection of velocity onto the MTV

�⃗�𝑎

𝑢𝑏

�⃗�𝑏

𝑢𝑎

Page 21: Lecture 6

Putting it all togetherPhysically correct collision response:1. Calculate COR with the restitutions of the

shapes2. Project velocities onto MTV3. Apply impulse formula to calculate impulses4. Apply corresponding impulse to each shape

Page 22: Lecture 6

QUESTIONS?Physics II

Page 23: Lecture 6

LECTURE 6Raycasting

Page 24: Lecture 6

What is raycasting?• Determine the first

object that a ray hits• A ray is like a ray of

light, has a source and direction and goes on forever

• It’s like a camera (or eye)

Page 25: Lecture 6

Raycasting Uses• When would we

need to raycast?– Hitscan weapons– Line of sight for AI– Area of effect– Rendering

Page 26: Lecture 6

The Ray• A ray is a point (source)

and a direction• Point on ray given by:

• is the source point• is the direction

– This must be normalized!

• is a scalar value (length)

�̂�

𝑡 �̂�

Page 27: Lecture 6

Basics• Raycasting boils down

to finding the intersection of a ray and shapes

• Kind of like collision detection all over again

• You want the point of collision as well

Page 28: Lecture 6

Ray-Circle• If the point is outside• Project center onto ray• Check if the projection

is positive and the point is within the circle

• Point of intersection:

Page 29: Lecture 6

Ray-Circle• If the point is outside• Project center onto ray• Check if the projection

is positive and the point is within the circle

• Point of intersection?

𝐿

Page 30: Lecture 6

Ray-Circle• If the point is outside• Project center onto ray• Check if the projection

is positive and the point is within the circle

• Point of intersection?

𝑟

𝑥√𝑟2−𝑥2

𝐿−√𝑟2−𝑥2

Page 31: Lecture 6

Ray-Circle• If the source point

is inside the circle• Do the same thing

as if outside, but:

• Now is allowed to be negative

𝑟𝑥

√𝑟2−𝑥2

Page 32: Lecture 6

Ray-Polygon/AAB• A polygon/AAB is

composed of edges• We can check for

intersection of ray by checking for intersection of all edges

• There is no shortcut for AABs this time

Page 33: Lecture 6

Ray-Edge• Edge is defined by two

end points, and • We need some other

vectors:• is direction of the

segment (normalized)• is the perpendicular to

the segment (normalized)

�⃗�

�⃗��⃗�

�̂�

�̂� �̂�

Page 34: Lecture 6

Ray-Edge• Firstly, determine if

the segment straddles the ray

• Use cross products• and must be of

opposite sign• Therefore no

intersection if

�⃗�

�⃗��⃗�

�̂�

�̂� �̂�

�⃗�−�⃗�

�⃗�− �⃗�

Page 35: Lecture 6

Ray-Edge• Secondly, determine

if the two lines intersect

• Point of intersection

• Solve for • must be

nonnegative!

�⃗�

�⃗��⃗�

�̂�

�̂� �̂�

�⃗�

Page 36: Lecture 6

Ray-Edge• Because lies on

the segment

• So plugging in:

�⃗�

�⃗��⃗�

�̂�

�̂� �̂�

�⃗�

Page 37: Lecture 6

Ray-Polygon• Intersect the ray with all

the edges of the polygon• Ray intersects polygon if

it intersects at least 1 edge

• Keep track of the point that is closest to the source (the lowest value of )

Page 38: Lecture 6

Putting it all togetherRaycasting:1. Intersect ray with every shape in the world

1. For circles, use the circle-ray algorithm in the slides2. For polygons, intersect each edge and use the

closest

2. Keep track of closest intersection point from the source as well as the corresponding shape

Page 39: Lecture 6

QUESTIONS?Raycasting

Page 40: Lecture 6

LECTURE 6Final Project Overview

Page 41: Lecture 6

Overview• Can be any 2D game and engine• You can work in groups if you want• Each person is responsible for 10 “points”

worth of new engine features– More members in a group means more engine

features– More details in the final project handout

Page 42: Lecture 6

Timeline• 4 main parts:

– Week 1: Idea– Week 2: Form groups

and get approved– Week 3: Design– Weeks 4-8: Code,

playtest, polish, present

Page 43: Lecture 6

Week 1: Idea• A ½ to 1 page document• Describe basic gameplay idea– How is your game fun?

• Describe engine feature(s) you plan on implementing

• Give a 60-second “elevator pitch” of your game in class

Page 44: Lecture 6

Week 2: Groups• Form a group (or decide to work alone)• Finalize game and engine features• Each group must meet with a TA to

present the following:– A more polished idea of the game– Breakdown of member responsibilities

for engine

Page 45: Lecture 6

Week 3: Design• Research new engine features• Design the engine and game• Exact breakdown of member responsibilities• Choose someone’s engine to use or

integrate engines• For groups of 3 or more

– Explain how you will use version control

Page 46: Lecture 6

Weeks 4-8• Week 4: – Engine should be mostly done– Game exists

• Week 5: – Engine should be done– Game is playable– 5 playtests per member from people not in

CS195n

Page 47: Lecture 6

Weeks 4-8• Week 6: – Game should be mostly done– 5 more playtests per member from outsiders

• Week 7: – Game should be done– 5 playtests per member– Powerpoint slideshow for postmortem

presentation

Page 48: Lecture 6

Weeks 4-8• Week 8:– Polish up your game, bug fixes, etc– Create an executable and put it in /contrib– Make a video demo of your game from

gameplay footage

• It is now December 19th

• And then you’re done!

Page 49: Lecture 6

QUESTIONS?Final Project Overview

Page 50: Lecture 6

LECTURE 6Tips for M II

Page 51: Lecture 6

Raycasting Groups• Similar to collision groups• Some objects shouldn’t be raycasted on,

just like some objects are not meant to be collided

• Special case: the source– If you’re raycasting from a shape, you don’t

want to check the shape itself

Page 52: Lecture 6

Jumping Properly• Extra requirement this week: player can

jump once iff standing on a solid object• Use information from your collision

response object!• If the MTV points downwards, then the

player has hit something solid below it– Player is now allowed to jump

Page 53: Lecture 6

Fixed Timestep• Most of you will have noticed weird behavior

when you fullscreen/resize• It screws around with the nanosSincePrevTick• Solution: fixed timestep

– Give the physics world some constant time when ticking

– Tick as many times as possible on each game tick

Page 54: Lecture 6

JAVA TIP OF THE WEEKTips for M II

Page 55: Lecture 6

Methods of Object• Object has a few

methods that you should know/care about:– hashCode()– equals(Object o)– toString()

public class Object { int hashCode(); boolean equals(Object obj){ return (this == obj); } Object clone(); String toString();}

Page 56: Lecture 6

toString• Called whenever you use

the object as a string• You should override this

in your classes to return meaningful strings– It’s worth doing if you

debug with printlines

• See Vec2f for examples

public class Object { public String toString(){ return getClass().getName() + “@” + hashCode(); }}public class PhoneNumber { public String toString(){ return “(” + _areacode + “)” + _number; }}

Page 57: Lecture 6

equals• Determines if object is

equal to another object

• The default method compares references– Doesn’t work if you

want equal but not the same object (e.g. String)

public class Object { boolean equals(Object obj){ return (this == obj); }}

Page 58: Lecture 6

equals• To override:– Use default check

first– Check if instanceof– Cast to object– Compare things

• You can access fields directly!

public class Book { String author; String title; boolean equals(Object obj){ if (this == obj) return true; if (!(obj instanceof Book)) return false; Book o = (Book) obj; return o.author.equals(author) && o.title.equals(title); }}

Page 59: Lecture 6

Contract of equals• A few things must be

true about your equals():– o.equals(o) must be true– o.equals(null) is always

false– must be symmetric– must be transitive– o1.equals(o2) changes

only if o1 or o2 changes

public class Book { String author; String title; boolean equals(Object obj){ if (this == obj) return true; if (!(obj instanceof Book)) return false; Book o = (Book) obj; return o.author.equals(author) && o.title.equals(title); }}

Page 60: Lecture 6

hashCode• Returns the hash of the

object• This value is used by

Java’s Map data structures

• You must override hashCode if you override equals – Otherwise data structures

can do weird things

public class Object { public int hashCode();}

Page 61: Lecture 6

Contract of hashCode• hashCode must return the

same value for the same object unless it is changed

• If two objects are equal, they have the same hashCode

• If two objects are unequal, ideally they will have different hashCode

public class Object { public int hashCode();}

Page 62: Lecture 6

Overriding hashCode• Many ways of

actually calculating hash of an object

• You can look them up if you want

public int hashCode(){ int hash = 5; //prime int prime = 89; //prime hash = prime*hash + x; hash = prime*hash + y; hash = prime*hash + z; return hash;}

Page 63: Lecture 6

QUESTIONS?Tips for M II

Page 64: Lecture 6

M I PLAYTESTING!

Hooray!