【问题标题】:3D collision detection with MatGeoLib?使用 MatGeoLib 进行 3D 碰撞检测?
【发布时间】:2013-08-17 23:59:31
【问题描述】:

我正在为一些托管游戏服务器的专用服务器软件编写一个 C++ 插件。

我四处寻找 3D 碰撞库,但很难找到任何带有示例的库,但我决定使用 MathGeoLib,因为它看起来很有希望 - 但它缺少示例,我无法找到任何示例。

所以我的问题是:我将如何定义一个球体和一个立方体,一条线(点+方向),然后获得该线遇到的第一次碰撞的位置 XYZ?

文档只显示了类和它们有哪些方法。但没有显示如何开始使用 MathGeoLib。有没有在 google 上找不到的教程?


我的项目的背景信息:

我正在为 San Andreas Multiplayer 制作碰撞检测器,服务器没有任何关于游戏世界的信息,所以我决定提取碰撞文件和对象放置文件并将它们转换为我的插件可用的格式。

对象具有位置 XYZ 和四元数旋转 XYZW 以及碰撞文件,嗯,have lots of stuff in them [项目成员正在为项目的这些 .col 文件编写解析器]。

项目目标是提供一种机制来根据 XY 位置确定 Z 位置,并提供一个光线跟踪器,它可以告诉您游戏世界中一条线(StartPos、EndPos)相交(命中 XYZ)的位置。

这就是为什么我需要知道如何使用 MathGeoLib 来完成这项工作。我要将所有对象碰撞加载到一个世界中,然后执行光线追踪器功能。 (在 6000x6000x1000 的区域中,物体的数量约为 30,000)

【问题讨论】:

  • Gizmo,顺便说一句,你试过子弹吗?
  • 不,在“C++ 3D 碰撞库”下找不到,它是一个游戏物理引擎.. ?
  • 我是否可以公开/使用碰撞检测功能?
  • 我们在游戏开发和分发框架中使用,称为“Gluon”,用于碰撞检测。

标签: c++ 3d collision-detection


【解决方案1】:

看看

http://bulletphysics.org/wordpress/

Bullet 是一个开源物理引擎,附带大量示例代码。特别是您想使用动态世界的 rayTest() 方法来投射光线并返回最近的碰撞点。总结一下,你需要;创建一个动态世界,将您的球体和立方体数据加载到其中,然后调用rayTest(startPoint, endPoint, resultCallback);

假设您在开始使用“hello world”示例代码之前没有使用过项目符号,以了解如何轻松创建动态世界并向其添加刚体。

【讨论】:

  • 我想知道作者是否可以按照我的建议切换到Bullet,或者他真的在寻找matgeolib的解决方案。不过,我自己从未使用过那个库。 :)
  • 我不介意,只要我能得到碰撞点 :) 这就是我的插件的内容,我从今天开始,所以切换并不难。我会检查子弹,你好世界的例子是可以理解的..但是教程页面是empty...
  • nvm 我看到页面moved to here。去试试
  • 如果您使用 Bullet,您还应该在了解 hello world 示例之后查看多线程调度程序示例“SpuGatheringCollisionDispatcher”。我将它添加到我的游戏项目中,它将模拟时间减少了一半。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-04
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多