2012-10-07 40 views
0

說我正在將(0.5,0.5)移動到表面法線爲(-1,0)的牆中。我想最終的結果是(0,0.5),所以我不能繼續移動到牆上,但沿着表面滑動。在碰撞後從方向上消除表面軸

我該如何做到這一點?我有

comp_u = n * (maths::dot(dir,n)/maths::dot(n,n)); 

這使我的方向的分量垂直於碰撞的表面上,其中「n」是一個矢量垂直於碰撞的表面上,並且也可以取消這一點。但是,如果我試圖遠離牆壁,它將取消該組件,這意味着我永遠不會離開牆壁。

+0

沿表面滑動?通常(雙關語)你會被反射離開表面。您可以通過否定(不歸零)正常分量來對此進行建模。你在建模某種非常各向異性的環境嗎? –

+0

這不適用於任何物理,只是在遊戲中的碰撞響應。 – pighead10

回答

1

如果運動方向與正常方向相反,則只能進行該操作......也就是說,dot(dir,n)是負值。

如果結果是肯定的,那麼您正在遠離牆壁,並且不要修改dir