c++ - 体素世界中的碰撞检测?

标签 c++ collision

我从事体素游戏已有一段时间了,它使用的是我编写的算法。但是,我仍然坚持碰撞检测;因为我真的不知道从哪里开始。体素引擎并不复杂。

我真的只需要计算高度图的高度。

以这张脸为例:(请原谅我糟糕的形象)enter image description here

假设我相对于多边形的位置是 0.5,0.5(中心)。此时我将如何计算 y 位置?

最佳答案

感谢 Ped7g,我们终于解决了高度图的实际问题。

首先我想指出,这与体素完全无关。您的引擎恰好使用体素,但您的问题无关。 碰撞检测也是如此。虽然它与您想要使用的东西相关,但您基本上忽略了实际问题。

其次,像 Ped7g 提议的三角剖分可行,但我看到了一个缺点,它基本上会产生一个由三角形组成的表面。 对于您的示例和三角测量

 ___        
|\  |    
| \ |    
|__\|

左下角的三角形会平放在地面上,只有右上角的三角形会倾斜。 更复杂的三角测量看起来会更好,但仍然由三角形表面组成,并且还需要您使用几组重心坐标。

在正方形内插值的常用方法是 Bilinear Interpolation ,它的每个角落都影响着每个点,使用一个简单的公式。

给定 0..1 中的 λx 和 λz,它们表示您在单位正方形中的相对位置(在 x 和 z 上方)以及角上的高度 y00、y01、y10 和 y11,高度很简单

y = (1-λx)(1-λz)y00 + (1-λx)(λz)y01 + (λx)(1-λz)y10 + (λx)(λz)y11

请注意,这将在边缘创建线条。双线性插值的优点是速度。缺点是在边缘上,高度不会表现得很平滑,也就是不可微分。如果你想要那样,你需要更复杂的方法来考虑相邻的方 block 。 Ped7g 提到 B 样条曲线,可以使用 B 样条曲线曲面,但需要一段时间才能实现,而且速度不快,不会向初学者推荐这些(但如果您有兴趣,click on this link。第 8 章包含您需要的内容,但你最好先阅读其他章节)。一个好的中间立场是 Bicubic Interpolation .该链接包含双三次插值和双线性插值的直观比较。

不过,假设您是初学者,我建议您使用双线性。

关于c++ - 体素世界中的碰撞检测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41630905/

相关文章:

c++ - 对 Class::Class/Function 的 undefined reference (OOP 初学者)

c++ - 什么是 undefined reference /未解析的外部符号错误,我该如何解决?

c++ - Dalvik 对 native C++ 代码性能的影响?

c++ - 检查从enable_shared_from_this派生的对象是否由shared_ptr管理?

ios - 让 SKPhysicsBody 变得坚不可摧?

javascript - HTML Canvas 和 JavaScript 通过碰撞检测旋转对象

Java 碰撞检测

c++ - UDP 在第一次后停止发送

c++ - 概述 rpg 平铺空间

c++ - SDL 冲突处理