This topic is now archived and is closed to further replies.


sliding against wall

Recommended Posts

norman_106    122
I need help with some physics. How do I sliding against wall? Every time there is a collision detected I "stick" to the wall! I was trying to look this topic up in search engines with little results. However, I did come across some sites that suggested using dot product, vectors, and scalars. So I did a little research but I still don’t understand how these concepts are related to my main goal? Can anyone explain how to create the effect of sliding across a wall when there is a collision? Thanks, Norm

Share this post

Link to post
Share on other sites
norman_106    122
Actually this was one of the articles that found. I can’t get much from it. In the article it states:
Vt += Ni * (-dot(Ni,Vt)-Nd)

Vt = Desired Target or Destination of Player
Ni = Normal to the plane of impact
Nd = The "D" of the hit poly''s "plane equation"

Is Vt a vector object with X, Y, and Z properties? If not, then how do I convert Vt to get the objects new X, Y, and Z position? And I don’t know what they mean when they explain the value of Nd. Can someone explain or direct me to another article?

Share this post

Link to post
Share on other sites
mnansgar    421
This is an interesting question ...

You should already have a vector where its magnitude is the player's velocity and its (x,y,z) are in the direction of the player's motion.

When you hit the wall, you need to find a second vector that is parallel to the wall: 1) Find two points at the same height on the wall (preferably the top two or bottom two of the wall's polys). 2) Find the vector between them: v = (p2.x-p1.x, p2.y-p1.y, p2.z-p1.z). 3) Find its unit vector and replace v with it.

Now we simply need to find the new vector of movement by projecting the current one onto the vector parallel to the wall: (dot product of u and v) * v. Using this method, the player will not lose his original velocity (he'll just move in a different direction).

To answer your questions regarding the article:
1) Vt is a 3-dimensional vector.
2) Nd = 'd' in the following plane equation for the wall: ax + by + cz + d. The plane equation can be calculated by:

a) Finding 3 points on the plane.
b) Calculating vectors u and v from these, both vectors originating from the same point.
c) Finding the cross product of u and v (the plane's normal).
d) If the cross product = the vector (a,b,c), then the plane equation can be found by:
a(x-x1)+b(y-y1)+c(z-z1)=0. Thus, d = -a*x1 - b*y1 - c*z1.

I hope this helps!

[edited by - mnansgar on August 7, 2002 12:23:57 AM]

Share this post

Link to post
Share on other sites