游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1990|回复: 2

粒子的碰撞检测问题

[复制链接]

18

主题

21

帖子

27

积分

注册会员

Rank: 2

积分
27
发表于 2007-4-17 14:13:00 | 显示全部楼层 |阅读模式
小弟要实现一个粒子在运动过程中和长方体作一个碰撞检测,
若用包围盒的方法,具体方法如下:
在更新粒子各项属性值时,判断该粒子的当前位置是否在长方体盒中,若在,则连线当前粒子位置和初始位置,并求出该连线与面的相交点.最后求出反射方向.
但不知道该如何判断粒子是否在盒子中,请高手提点一下,如果有关于这方面的例子或原代码更好.最好能写一下相关的函数,小弟是个初学者,不胜感激.
以下是部分相关代码:
//数据更新
if(fps==0) fps=30;
Particles oldParticle( *this );//保存的初始粒子属性
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;
if(alpha<=0.0f) {
        dead=true;
        return;
}
//这里是进行判断:
//if 粒子在盒子里面 then
//  连线: oldParticle.Pos --> this-&gtos
//  连线与盒子求交点
//  求出反射方向


//长方体模型绘制:
glPushMatrix();
        glTranslatef(56, 14, 56);
        glBindTexture(GL_TEXTURE_2D, texture[0]);                                                // 选择纹理
        glBegin(GL_QUADS);
                // 前面
                glTexCoord2f(0.0f, 0.0f); glVertex3f(-4.0f, -2.0f,  4.0f);        // 纹理和四边形的左下
                glTexCoord2f(1.0f, 0.0f); glVertex3f( 4.0f, -2.0f,  4.0f);        // 纹理和四边形的右下
                glTexCoord2f(1.0f, 1.0f); glVertex3f( 4.0f,  2.0f,  4.0f);        // 纹理和四边形的右上
                glTexCoord2f(0.0f, 1.0f); glVertex3f(-4.0f,  2.0f,  4.0f);        // 纹理和四边形的左上
                // 后面
                glTexCoord2f(1.0f, 0.0f); glVertex3f(-4.0f, -2.0f, -4.0f);        // 纹理和四边形的右下
                glTexCoord2f(1.0f, 1.0f); glVertex3f(-4.0f,  2.0f, -4.0f);        // 纹理和四边形的右上
                glTexCoord2f(0.0f, 1.0f); glVertex3f( 4.0f,  2.0f, -4.0f);        // 纹理和四边形的左上
                glTexCoord2f(0.0f, 0.0f); glVertex3f( 4.0f, -2.0f, -4.0f);        // 纹理和四边形的左下
                // 顶面
                glTexCoord2f(0.0f, 1.0f); glVertex3f(-4.0f,  2.0f, -4.0f);        // 纹理和四边形的左上
                glTexCoord2f(0.0f, 0.0f); glVertex3f(-4.0f,  2.0f,  4.0f);        // 纹理和四边形的左下
                glTexCoord2f(1.0f, 0.0f); glVertex3f( 4.0f,  2.0f,  4.0f);        // 纹理和四边形的右下
                glTexCoord2f(1.0f, 1.0f); glVertex3f( 4.0f,  2.0f, -4.0f);        // 纹理和四边形的右上
                // 底面
                glTexCoord2f(1.0f, 1.0f); glVertex3f(-4.0f, -2.0f, -4.0f);        // 纹理和四边形的右上
                glTexCoord2f(0.0f, 1.0f); glVertex3f( 4.0f, -2.0f, -4.0f);        // 纹理和四边形的左上
                glTexCoord2f(0.0f, 0.0f); glVertex3f( 4.0f, -2.0f,  4.0f);        // 纹理和四边形的左下
                glTexCoord2f(1.0f, 0.0f); glVertex3f(-4.0f, -2.0f,  4.0f);        // 纹理和四边形的右下
                // 右面
                glTexCoord2f(1.0f, 0.0f); glVertex3f( 4.0f, -2.0f, -4.0f);        // 纹理和四边形的右下
                glTexCoord2f(1.0f, 1.0f); glVertex3f( 4.0f,  2.0f, -4.0f);        // 纹理和四边形的右上
                glTexCoord2f(0.0f, 1.0f); glVertex3f( 4.0f,  2.0f,  4.0f);        // 纹理和四边形的左上
                glTexCoord2f(0.0f, 0.0f); glVertex3f( 4.0f, -2.0f,  4.0f);        // 纹理和四边形的左下
                // 左面
                glTexCoord2f(0.0f, 0.0f); glVertex3f(-4.0f, -2.0f, -4.0f);        // 纹理和四边形的左下
                glTexCoord2f(1.0f, 0.0f); glVertex3f(-4.0f, -2.0f,  4.0f);        // 纹理和四边形的右下
                glTexCoord2f(1.0f, 1.0f); glVertex3f(-4.0f,  2.0f,  4.0f);        // 纹理和四边形的右上
                glTexCoord2f(0.0f, 1.0f); glVertex3f(-4.0f,  2.0f, -4.0f);        // 纹理和四边形的左上               
        glEnd();
        glPopMatrix();

18

主题

21

帖子

27

积分

注册会员

Rank: 2

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

Re: 粒子的碰撞检测问题

能帮我具体写一下其中一个面的算法吗?我在网上找了好久都没有找到这方面的例子,真是急死了我了.

1

主题

6

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2007-4-19 13:48:00 | 显示全部楼层

Re:粒子的碰撞检测问题

我也想知道...
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-26 18:07

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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