游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2852|回复: 3

急救:有谁知道OpenGL里关于碰撞检测的滑行算法啊?

[复制链接]

18

主题

21

帖子

27

积分

注册会员

Rank: 2

积分
27
发表于 2007-5-16 12:07:00 | 显示全部楼层 |阅读模式
就比如一个粒子,在碰到障碍物以后沿着障碍物的外表面滑行....小弟要编一个这样的碰撞检测程序.
if (Pos.x>Min.x&&ampos.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;

1

主题

102

帖子

108

积分

注册会员

Rank: 2

积分
108
QQ
发表于 2007-5-17 13:29:00 | 显示全部楼层

Re:急救:有谁知道OpenGL里关于碰撞检测的滑行算法啊?

你的speed,speed_acc是标量吧。
都弄成向量,该乘时间间隔的地方乘一下,完善一下,成为一个简单的欧拉法物理质点模拟器

看见你实现了碰撞检测,碰撞处理时给物体一个冲量
根据冲量的大小,物体可能会反弹,或者滑动
冲量计算公式如下:
impluse = (-(1+e) * (v * n) * m) * n
n为碰撞面法向量

为了让他滑动,取恢复系数e为0

注:以上公式已根据你的实际问题简化了,不适合处理别的问题

18

主题

21

帖子

27

积分

注册会员

Rank: 2

积分
27
 楼主| 发表于 2007-5-17 17:17:00 | 显示全部楼层

Re:急救:有谁知道OpenGL里关于碰撞检测的滑行算法啊?

请问一下,这个v和m代表什么啊?能告诉我你的QQ吗?我想单独请教你一下...谢谢

1

主题

102

帖子

108

积分

注册会员

Rank: 2

积分
108
QQ
发表于 2007-5-17 22:20:00 | 显示全部楼层

Re:急救:有谁知道OpenGL里关于碰撞检测的滑行算法啊?

QQ: 594373279
v是质点的目前的速度(碰撞前的速度),m是质量

算出的冲量 I = m * △v
算出△v,累加到速度上

BTW:LZ是不是要做烟什么的,把烟视为一群粒子,然后绕过障碍,继续飘?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 10:40

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表