Re: [Algorithms] Broadphase collision
Brought to you by:
vexxed72
From: Priyank J. <fly...@gm...> - 2010-03-24 18:50:58
|
Hi, I apologize in advance, but I'm not sure if my earlier message about broadphase collision got posted or not. Earlier when I posted it, it gave me a bounce-back error, saying that the message was too long, so am not sure if my question got posted. If none of you received it, please let me know. Thanks /Priyank On 3/24/2010 1:22 PM, Priyank Jain wrote: > Hi, > I am trying to implement broadphase collision for my game (3D FPS > genre). I have been reading about the commonly used techniques and I > have tailored the grid approach to my game. I want to know if this is > the right direction to go in or not. > The involved actors are :- > Players > Bullets(Fired) > Weapons (placed at points located throughout the level, which other > players can pick up, aka static objects) > World > As of now, I am just trying to get the Players and bullet collision > pairs. > Players: Players are represented by a bounding sphere, located at a > position and moving with a velocity. Each player would have > approximately the bounding sphere of same size. > Players - weapons > Players - World > Bullets: Bullets are represented by a segment with a start point and > an end point (using posn, posn + vel) (each frame). Bullet can hit :- > Fired Bullet Player > (Other) Bullet > World > > Approach: > - As each player and bullet is created, associate a reference to each > entity within CollisionMgr as a list<Player*> and list<Bullet*>. > - On each update frame, do the following: > - For each player, find Cell(s); it is associated with :=> list< Cell* > > PlayerCells > - For each Bullet (segment), find Cell(s); it is associated with :=> > list< Cell* > BulletCells > - For each entity, the cell(s) can be found out based on the entity. > - Player: Bounding sphere :The grid size are uniformly sized cell > (size, M) such that the M = 2R (R = radius of the bounding sphere). > Thus, at any given time, at most the bounding sphere can be in contact > with 4 cells. To determine the cells associated, find the 8 points for > a given sphere (each at 45 degrees to the X,Y,Z axis along the 8 > octants). (And then find out, in which grid cell does each of the > point lie. This could at max return 4 cells). > - Bullet: Segmented Ray with endpoints at : Posn and (Posn + vel). > Thus, all the cells that the line passes through would yield the cells. > - Cell can be a structure like > Cell { > List < Player*> > List < Bullet* > > Value (x,y,z) => unique value based on these three coordinates > } > - As a cell is found by either of the entities, given its coordinates > and grid position, a cell can be put on the hash-map. As the players > and bullets yield cells, they can be referenced using this map and > in-turn populate the list of player and bullet residing within that > cell structure. > - After all the player and bullet –affected cells have been found, if > we iterate through the hash-map, then it would yield all the possible > pair of colliding players and bullets in a given cell. This can then > be further handled using narrow-phase collision. > > Does this sound feasible ? I'd really like to get some feedback on this. > > Thank you > /Priyank Jain |