   simple AABB collision problem
  Hello all, I have an AABB collision issue...I have numerous walls in a scene; they have been translated (but not rotated) to various places in the scene.  This translation for each wall is saved, so I am able to use that for the world coordinate for collision detection.The Camera/Player class I was trying to test using is pulling the position of it (x,y,z), and adding 1 unit to each to obtain the MAX box edges, and subtracting for the MIN bounding edges.Currently, I''m only testing with 1 of the walls, so I can at least get part of it working initially.The collision is a simple AABB collision detection:if (playerMinX > wallMaxX) return false; //no collisionif (playerMaxX < wallMinX) return false; //no collisionif (playerMinY > wallMaxY) return false;if (playerMaxY < wallMinY) return false;if (playerMinZ > wallMaxZ) return false;if (playerMaxZ < wallMaxZ) return false; return true; //nothing returned false, so there''s a collisionThis never registers a collision.However, if after each of those IF''s, I put an "else return true;" statement, I get lots of false hits:player(0,0,120)wall (6.25,0,100)collision @ playerMinX > wallMaxX(which evaluates true...but not really a collision)Probably the worst thing about this...I''ve done this before, had the same problem, don''t remember how it was fixed, and don''t have the code anymore either.... Help?  =) 
  Shouldn't that last test be:if (playerMaxZ < wallMinZ) return false   EnigmaEDIT: ugh that looked horrible   [edited by - Enigma on February 12, 2004 3:12:35 PM];  Yeah, it actually is MinZ...  the code posted isn''t quite what my live code looks like, ''cause it''s sorta ugly as it is...Here''s the live code (last line):if ( (playerOneMaxZ) > (world.walls[wallNum].wallZ -wallCollideFactor) ){return false;} The rest of the Min''s/Max''s for players and walls look pretty much like that.Any other ideas? ;  Post the real code.  I can''t see anything wrong with the simplified  version you posted.Enigma ;  Here''s the loop for the collision stuff... for (int wallNum=0; wallNum<world.numberOfWalls; wallNum++){if ( (playerOneMinX ) > (world.walls[wallNum].wallX +wallCollideFactor) ){return  false;}//else{ return true;}if ( (playerOneMaxX ) < (world.walls[wallNum].wallX -wallCollideFactor) ){return  false;}//else{return true;}if ( (playerOneMinY ) > (world.walls[wallNum].wallY +wallCollideFactor)){return  false;}//else{return true;}if ( (playerOneMaxY ) < (world.walls[wallNum].wallY -wallCollideFactor) ){return false;}//else{return true;}if ( (playerOneMinZ) < (world.walls[wallNum].wallZ +wallCollideFactor) ){return  false;}//else{return true;}if ( (playerOneMaxZ) > (world.walls[wallNum].wallZ -wallCollideFactor) ){return false;}//else{return true;} }return true;The else''s are commented out, ''cause they give false collisions.  As is, it gets no collisions.  Let me know if you need more info...and thanks for the help.  ;  The last two tests are wrong.  You have:if ((playerOneMinZ) < (world.walls[wallNum].wallZ +wallCollideFactor)){return  false;}if ((playerOneMaxZ) > (world.walls[wallNum].wallZ -wallCollideFactor)){return false;}  when you should have:if ((playerOneMinZ) > (world.walls[wallNum].wallZ +wallCollideFactor)){return  false;}if ((playerOneMaxZ) < (world.walls[wallNum].wallZ -wallCollideFactor)){return false;}  (Note the <''s and >''s).Enigma ;  Dang man, you wouldn''t believe how many times I checked and double checked those...  Thanks!  It seems to be working now...another problem was wallCollideFactor was set to 0, so it looks like I was trying to collides with points...Thanks again.  