space partitioning for broad sweep collision detection part 2 quadtrees l.
Download
Skip this Video
Download Presentation
Space Partitioning for Broad Sweep Collision Detection Part 2 - Quadtrees

Loading in 2 Seconds...

play fullscreen
1 / 11

Space Partitioning for Broad Sweep Collision Detection Part 2 - Quadtrees - PowerPoint PPT Presentation


  • 159 Views
  • Uploaded on

Space Partitioning for Broad Sweep Collision Detection Part 2 - Quadtrees. Game Design Experience Professor Jim Whitehead February 13, 2009. Creative Commons Attribution 3.0 creativecommons.org/licenses/by/3.0. Announcements. Technical Design Document Due today

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Space Partitioning for Broad Sweep Collision Detection Part 2 - Quadtrees' - fisk


Download Now An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
space partitioning for broad sweep collision detection part 2 quadtrees

Space Partitioning for Broad Sweep Collision DetectionPart 2 - Quadtrees

Game Design Experience

Professor Jim Whitehead

February 13, 2009

Creative Commons Attribution 3.0creativecommons.org/licenses/by/3.0

announcements
Announcements
  • Technical Design Document
    • Due today
    • May turn it in to the box by my door by the end of the day
  • Have midterm exams
    • See me after class to pick up
    • Answer key is on class website
broad vs narrow sweep
Broad vs Narrow Sweep
  • With many small objects in large playfield
    • Each object only has the potential to collide with nearby objects
  • Broad sweep
    • Perform a quick pass over n objects to determine which pairs have potentialto intersect, p
  • Narrow sweep
    • Perform p x p check of objectpairs that have potential tointersect
  • Dramatically reduces # of checks

Mushihimesama

broad sweep approaches
Broad sweep approaches
  • Grid
    • Divide playfield into a grid of squares
    • Place each object in its square
    • Only need to check contents of square against itself and neighboring squares
    • See http://www.harveycartel.org/metanet/tutorials/tutorialB.html for example
  • Space partitioning tree
    • Subdivide space as needed into rectangles
    • Use tree data structure to point to objects in space
    • Only need to check tree leaves
    • Quadtree, Binary Space Partition (BSP)tree
  • Application-specific
    • 2D-shooter: only need to checkfor collision against ship
    • Do quick y check for broad sweep

Point Quadtree (Wikipedia)

trees
Trees

root

  • 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

56

a

b

45

75

d

c

24

51

// A simple tree node class

Class Node {

List<Node> children; // List of references to Nodes

int contents;

}

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.

tree operations
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)
point quadtree
Point Quadtree

root

  • 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

0

1

0

3

1

2

2

3

root

1.1

1.0

0

3

1

2

0

1

1.2

1.3

1.0

1.1

1.2

1.3

2

3

c node representation
C# Node Representation

class Node

{

Point min[4];

Point max[4];

int level;

Node Quad[4]; // holds 4 quadrants

List<IGameObject> objectList; // list of game objects in a Node

}

  • 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

Quad[0]

Quad[1]

Quad[2]

Quad[3]

adding object to tree
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
finding removing object in tree
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)