我正在用C ++编写一个插件,用于托管服务器的专用服务器软件。
我四处寻找3D碰撞库,但很难找到任何示例,但我决定使用MathGeoLib,因为它看起来很有前途 - 但它缺少示例,我找不到任何示例。
所以我的问题是:我如何定义一个球体和一个立方体,一条线(点+方向),然后获得该线遇到的第一次碰撞的位置XYZ?
文档仅显示类及其具有的方法。但没有任何显示如何开始使用MathGeoLib。是否有任何在谷歌上找不到的教程?
我项目的背景资料:
我正在为San Andreas Multiplayer制作碰撞检测器,服务器在游戏世界中没有任何信息,所以我决定提取碰撞文件和对象放置文件,并将它们转换为我的插件的可用格式。 / p>
对象的位置XYZ和四元数旋转XYZW以及碰撞文件,have lots of stuff in them [项目成员正在为项目的.col文件编写解析器]。
项目目标是提供一种机制,根据XY位置确定Z位置,并提供一个光线跟踪器,告诉您游戏世界中一条线(StartPos,EndPos)与哪里相交(点击XYZ)。 / p>
这就是我需要知道如何使用MathGeoLib完成此任务的原因。我将把所有对象碰撞加载到一个世界中,然后执行光线跟踪器功能。 (6000x6000x1000区域内物体的数量约为30,000)
答案 0 :(得分:1)
结帐
http://bulletphysics.org/wordpress/
Bullet是一个开源物理引擎,附带了大量示例代码。特别是,您希望使用动态世界的rayTest()方法来投射光线并返回最近的碰撞点。总结一下你需要;创建动态世界,将球体和立方体数据加载到其中,然后调用rayTest(startPoint, endPoint, resultCallback);
假设你在开始使用" hello world"之前没有使用过子弹。示例代码,了解如何轻松创建动态世界并为其添加刚体。