有哪位大神研究过半条命2的物理引擎!

我的小丫丫 2013-12-26 12:07:26
有哪位大神研究过半条命2的物理引擎!
最近在研究fps游戏相关的物理引擎!
我现在的做法是:
前提:游戏中需要计算碰撞的物体有1、玩家(所有玩家身高和体积一样,椭圆体,身高180,胖40),2、手雷(为球体,直径为10)
数据结构:用比较老的bsp切分法将整个游戏场景切分成一个一个的凸面空间,即node 和 leaf这样子的典型划分法,leaf和leaf之间用Portal
预先处理:由于只有玩家和手雷两个移动碰撞物体,将用bsp切分得到的所有多边形按照玩家的椭圆形和手雷的球体进行扩展,将本应该用椭圆体和球体进行碰撞计算的转换成点和面的碰撞,这样子做计算方法简单,但有很多不足,
比如:游戏中要增加一个小怪物,碰撞体和原来的玩家以及手雷的不同,这时候就又需要再按照上面的方法进行多边形预处理,内存中又多出一份来,如果再增加一个小车的碰撞,就又多一份内存!
看到半条命2的移动碰撞方法是对碰撞体进行扩展然后再去计算碰撞结果,这个扩展性很好,而且他的算法很牛,不过看不太懂原理和数据结构,希望有大神指点下,或者介绍几个相关的网站,我自己去看也成,小弟跪谢了
...全文
772 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiandingzhe 2014-01-02
  • 打赏
  • 举报
回复
有一本书叫game physics engine development,在CSDN上就能下到PDF。它详细讲解了游戏物理引擎的各个方面,从刚体动力学,到碰撞检测、穿透解决,到物体稳定化。你看完了会发现,一个稳定工作的物理引擎,很可能比你想的要复杂。 然后,碰撞检测本身就是一个专门的领域。有一本Elsevier的书叫《碰撞检测算法技术》,里面涉及了从基本的图元、几何体测试,到空间划分的几种方法,到任意凸多面体的碰撞检测。《游戏编程精粹7》这本书里将了一种叫MPR的碰撞检测算法,有非常高的通用性,可以应用于几乎任何凸体(不光是凸多面体)。 另外,其实我建议你使用一个现成的物理引擎,因为自己开发的几乎不可能在性能和正确性上比得过那些(当然,自己搞有乐趣)。现在的3D引擎有Newton、Bullet、ODE几个开源的,其中Bullet开发比较完善,而且支持显卡运算,另两个不太清楚。还有PhysiX是Nvidia搞的,支持在N卡上做物理加速。
我的小丫丫 2013-12-27
  • 打赏
  • 举报
回复
我是个游戏工作者
derekrose 2013-12-26
  • 打赏
  • 举报
回复
你是什么专业的?
我的小丫丫 2013-12-26
  • 打赏
  • 举报
回复
其实我就想研究研究source engine里的碰撞而已,有相关文章吗?
赵4老师 2013-12-26
  • 打赏
  • 举报
回复
3D碰撞问题域真是“广阔天地,大有作为。”啊!!!! 头脑风暴一下: 物理引擎 表面张力 分子间作用力 万有引力 月球车 机器人触觉 异性相吸 …… 够发展至少一个世纪了!
我的小丫丫 2013-12-26
  • 打赏
  • 举报
回复
自己顶一下!别沉了
源码链接: https://pan.quark.cn/s/8ddf8a1c92f9 **libcurl用于获取大型文件**libcurl作为一个开源的C语言库,提供了一系列的API来处理与URL相关的任务,涵盖了HTTP、FTP、SMTP等多种网络协议的应用。在执行大型文件的下载操作时,libcurl展现出卓越的性能表现和高度的灵活性,能够高效地管理大文件传输过程,有效预防内存溢出及其他潜在问题。**libcurl的基础操作**libcurl的基础应用包括以下几个环节:1. **初始化**:需要借助`curl_global_init()`函数来启动libcurl的工作环境。2. **建立会话句柄**:通过`curl_easy_init()`函数创建一个会话句柄,该句柄将用于后续所有的操作流程。3. **配置选项**:运用`curl_easy_setopt()`函数来设定多种参数,例如目标URL、超时时间、重试次数以及数据写入的回调函数等。4. **执行请求**:调用`curl_easy_perform()`函数来实施下载操作。5. **释放资源**:使用`curl_easy_cleanup()`函数来释放已经占用的资源。**获取大型文件时的重要设置**1. **数据写入回调函数**:在处理大型文件下载时,通常不希望一次性将整个文件载入内存。可以配置`CURLOPT_WRITEFUNCTION`选项,指定一个回调函数来处理接收到的数据片段,这样libcurl在接收到数据时会调用该函数,使得我们可以按需将数据写入文件或缓冲区。2. **缓冲策略**:可以设定缓冲区的大小(比如,通过`CURLOPT_BUFFERSIZE`),来控制每次接收数据的数量,从而优化内存...

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧