sliding against wall
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
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)
Where:
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?
Vt += Ni * (-dot(Ni,Vt)-Nd)
Where:
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?
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]
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]
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement
Recommended Tutorials
Advertisement