From: Jeremiah M. <mos...@ya...> - 2000-09-12 20:06:08
|
--- Chris Schoeneman <cr...@be...> wrote: > > Umm . . Why are we checking to see if a normal is positive? And > what > > object are we testing the normal for in this particular instance? > > because buildings can't float. :) > > the only way you could hit an object with a negative normal[2] is > from below because normal[2] < 0 means the surface faces down (at > least a little bit). you'll need to add such a test for the > undersides of floating obstacles. > > an object can have a normal[2] == 0, which means the surface is > vertical. bzflag checks normal[2] > 0 because you can't land on > a vertical surface, and that's what the test is for. > > the surface being tested is computed a little farther up in the > code. it's the surface the tank is in collision with. > > > > I did a quick search of the files using VC++'s "search in files," > and > > I haven't found any lines where there are more than one > > getPosition()[2]'s. > > but you might have a function that adds getPosition()[2] call > another function that also adds getPosition()[2]. > > > > Here's what I changed, so the player lands on top of a raised > > building, not in it: > > those changes look good but that's not enough. for example, > you should also modify Obstacle::getHitNormal() around line 81. > it currently reads: > > const float t = (pos1[2] - oHeight) / (pos1[2] - pos2[2]); > > but should be: > > const float t = (pos1[2] - oHeight - oPos[2]) / (pos1[2] - > pos2[2]); This was exatly the problem. After making this change, BZFlag worked perfectly! > > the function is finding the normal to the intersected surface > (the same one we're talking about above). the current code > doesn't account for buildings off the ground so it doesn't > always get the correct normal and that could easily cause the > problem you're seeing. > > also note that the above line is in a little block of code > that checks for intersection against the roof. you'll need > to add a similar check for the undersides there (among other > places). Yup, but first I had to get the roof working. > > -chris > > p.s. i took this discussion off the list only because my > laptop is in the shop most of this week and i can't reply > to the list until i get it back (unless i sign up again). > I'm putting this on the developers list, so everyone knows about it. I've completed the changes to allow tanks to go underneath boxes!! It works perfectly, except that I'm unsure if part of the tank goes "inside" the box before colliding with the bottom of the box. Is there a way to view the tank from the outside to check this? I'll probably work on pyramids next. One question: Should these collision-detection changes be put in CVS, since they don't break anything? __________________________________________________ Do You Yahoo!? Yahoo! Mail - Free email you can access from anywhere! http://mail.yahoo.com/ |