Presentation is loading. Please wait.

Presentation is loading. Please wait.

Computer Science – Game DesignUC Santa Cruz Today Homework Bounding Boxes Quadtrees Per-pixel collision Drawing text (if we have time)

Similar presentations


Presentation on theme: "Computer Science – Game DesignUC Santa Cruz Today Homework Bounding Boxes Quadtrees Per-pixel collision Drawing text (if we have time)"— Presentation transcript:

1 Computer Science – Game DesignUC Santa Cruz Today Homework Bounding Boxes Quadtrees Per-pixel collision Drawing text (if we have time)

2 Computer Science – Game DesignUC Santa Cruz Secret Game Two Parts – Part I: Debug Syntax errors Logical errors Improvements Comments – Part II: Complete Game Score Lives

3 Computer Science – Game DesignUC Santa Cruz Common Bounding Volumes Most introductory game programming texts call AABBs simply “bounding boxes” Circle/SphereAxis-Aligned Bounding Box (AABB) Oriented Bounding Box (OBB) Convex Hull Better bounds, better culling Faster test, less memory

4 Computer Science – Game DesignUC Santa Cruz Circle Bounding Box Simple storage, easy intersection test Rotationally invariant struct Point { int x; int y; } struct circle { Point c; // center int r; // radius } r c bool circle_intersect(circle a, circle b) { Point d; // d = b.c – a.c d.x = a.c.x – b.c.x; d.y = a.c.y – b.c.y; int dist2 = d.x*d.x + d.y*d.y; // d dot d int radiusSum = a.r + b.r; if (dist2 < = radiusSum * radiusSum) { return true; } else { return false; } Compare Euclidean distance between circle centers against sum of circle radii.

5 Computer Science – Game DesignUC Santa Cruz Axis-Aligned Bounding Boxes (AABBs) Three common representations – Min-max – Min-widths – Center-radius // min.x < =x < =max.x // min.y < =y < =max.y struct AABB { Point min; Point max; } // min.x < =x < =min.x+dx // min.y < =y < =min.y+dy struct AABB { Point min; int dx; // x width int dy; // y width } // | c.x-x | < = rx | c.y-y | < = ry struct AABB { Point c; int rx; // x radius int ry; // y radius } min max min c dx dy ry rx Can easily be extended to 3D

6 Computer Science – Game DesignUC Santa Cruz Axis Aligned Bounding Box Intersection (min-max) Two AABBs intersect only if they overlap on both axes a.max.x<b.min.x a.min.x>b.max.xa.min.x=b.min.x a.max.y<b.min.y a.min.y>b.max.y a.min.y=b.min.y bool IntersectAABB(AABB a, AABB b) { { if (a.max.x < b.min.x || a.min.x < b.max.x) return false; if (a.max.y < b.min.y || a.min.y < b.max.y) return false; return true; }

7 Computer Science – Game DesignUC Santa Cruz Axis Aligned Bounding Box Intersection (min-width) Two AABBs intersect only if they overlap on both axes -(a.min.x- b.min.x)>a.dx (a.min.x- b.min.x)>b.dx a.min.x=b.min.x -(a.min.y- b.min.y)>a.dy (a.min.y- b.min.y)>b.dy a.min.y=b.min.y bool IntersectAABB(AABB a, AABB b) { { int t; t=a.min.x-b.min.x; if (t > b.dx || -t > a.dx) return false; t=a.min.y-b.min.y; if (t > b.dy || -t > a.dy) return false; return true; } // Note: requires more operations than // min-max case (2 more subtractions, 2 more negations)

8 Computer Science – Game DesignUC Santa Cruz AABB Intersection (center-radius) Two AABBs intersect only if they overlap on both axes b.c.x-a.c.x > a.rx+b.ry a.c.x-b.c.x > a.rx+b.rx a.c.x=b.c.x b.c.y-a.c.y > a.ry+b.ry a.c.y-b.c.y > a.ry+b.ry a.c.y=b.c.y bool IntersectAABB(AABB a, AABB b) { { if (Abs(a.c.x – b.c.x) > (a.r.dx + b.r.dx)) return false; if (Abs(a.c.y – b.c.y) > (a.r.dy + b.r.dy)) ) return false; return true; } // Note: Abs() typically single instruction on modern processors

9 Computer Science – Game DesignUC Santa Cruz Trees A tree is a data structure – Places contents into nodes – Each node has Contents Pointers to 0 or more other levels – Children are represented as references root ab c d 4575 56 2451 A tree with 5 nodes (root, a, b, c, d). Root node has contents 56. Node a has contents 45, and two children, c and d. Node b has contents 75, and no children. Node c has contents 24, and no children. Node d has contents 51, and no children. // A simple tree node class Class Node { List children; // List of references to Nodes int contents; }

10 Computer Science – Game DesignUC Santa Cruz Tree Operations Adding a child – Create new node n = new Node(); – Add it to list of children of parent parentNode.children.Add(n); Removing a child – Find and remove child node from list of children parentNode.children.Remove(childToRemove); (childToRemove is reference to Node of child to be deleted)

11 Computer Science – Game DesignUC Santa Cruz Point Quadtree A tree where each node has four children – Each level represents subdividing space into 4 quadrants – Each node holds information about one quadrant – A deeper tree indicates more subdivisions MX Quadtree Demo http://donar.umiacs.umd.edu/quadtree/ points/mxquad.html Demo both points and rectangles 01 23 root 0 12 3 01 23 1.0 1.1 1.21.3 root 12 30 1.01.11.21.3

12 Computer Science – Game DesignUC Santa Cruz C# Node Representation quads is an array with four elements – Each element is a reference to a Node Quad[0] – upper left, etc. – A recursive data structure Nodes hold pointers to Nodes Min[] is an array with four elements – Each element is upper left point of quadrant Max[] holds lower right point of each quadrant Level indicates how many levels down in the tree – Useful for bounding the depth of the tree class Node { Point min[4]; Point max[4]; int level; Node Quad[4]; // holds 4 quadrants List objectList; // list of game objects in a Node } Quad[0]Quad[1] Quad[2]Quad[3]

13 Computer Science – Game DesignUC Santa Cruz Adding object to tree Insert(Node n, IGameObject g) Iterate through all 4 quadrants of current node (n) – If at maximum depth of the tree Add IGameObject to objectList and return – If AABB (bounding box) of IGameObject lies fully within a quadrant Create child node for that quadrant, if necessary Then call insert on that node (recursion) – Otherwise, AABB does not lie in just one quadrant Add to contents list at this level First call is Insert(root, g) – That is, start at root node for insertions

14 Computer Science – Game DesignUC Santa Cruz Finding, removing object in tree Find(Node n, IGameObject g) Iterate through all 4 quadrants of current node (n) – Check if AABB (bounding box) of IGameObject spans multiple quadrants Yes: IGameObject is in this node. Return node. – At maximum level of tree? Yes: IGameObject is at this level – If AABB (bounding box) of IGameObject lies fully within a quadrant Call find on that node (recursion) Removing object from tree – Found_node = Find(root, g) – Found_node.objectList.Remove(g)

15 Computer Science – Game DesignUC Santa Cruz Per-pixel collision

16 Computer Science – Game DesignUC Santa Cruz Drawing Text Create a new SpriteFont in Content folder Add a SpriteFont myText variable to your game In LoadContent(), use myText =Content.Load (“SpriteFont1”) In Draw(), spriteBatch.Begin(); spriteBatch.DrawString(myText, … ); spriteBatch.End();


Download ppt "Computer Science – Game DesignUC Santa Cruz Today Homework Bounding Boxes Quadtrees Per-pixel collision Drawing text (if we have time)"

Similar presentations


Ads by Google