|
|
就比如一个粒子,在碰到障碍物以后沿着障碍物的外表面滑行....小弟要编一个这样的碰撞检测程序.
if (Pos.x>Min.x&& os.x<Max.x&&Pos.y>Min.y&&Pos.y<Max.y&&Pos.z>Min.z&&Pos.z<Max.z)
{
bIntersect = TRUE;//判断是否发生碰撞
//求交,交点X
Position X;
X.x=(Min.y-this->Pos.y)/(oldParticle.Pos.y-this->Pos.y)*(oldParticle.Pos.x-this->Pos.x)+this->Pos.x;
X.y=Min.y;
X.z=(Min.y-this->Pos.y)/(oldParticle.Pos.y-this->Pos.y)*(oldParticle.Pos.z-this->Pos.z)+this->Pos.z;
this->Pos.x=X.x;
this->Pos.y=X.y;
this->Pos.z=X.z;
double r=(Pos.z-oldParticle.Pos.z)/(Pos.x-oldParticle.Pos.x);
下面的求交后的粒子的运动方式不知道该如何写,请哪位大虾指点一下,谢谢...
(其中Max和Min代表一个平行于X,Z轴的立方体的最大点和最小点,Pos代表粒子的当前位置,oldParticle是粒子的初始位置.)
以下是未发生碰撞的粒子在运动过程中的属性变化:
speed+=speed_acc;
Pos.y +=speed;
alpha-=alpha_dec;
size-=0.05f*(30/fps);
Pos.x +=-Pos.x/30.0f;
Pos.z +=-Pos.z/30.0f; |
|