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

我只需要计算高度图的高度即可。

以这张脸为例:(请原谅我可怕的形象)c++ - 体素世界中的碰撞检测?-LMLPHP

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

最佳答案

多亏了Ped7g,我们终于得出了实际的问题,即高度图。

首先,我想指出,这与体素完全无关。您的引擎碰巧使用了Voxels,但是您的问题无关紧要。
碰撞检测也是如此。尽管它与您要使用的东西相关,但实际上已省略了实际问题。

其次,像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

请注意,这将在边缘上创建线条。双线性插值的优点是速度。缺点是,在边缘上,高度将无法平滑运行,即无法区分。如果需要的话,则需要更复杂的方法来考虑相邻的正方形。 Ped7g提到了B样条曲线,可以使用B样条曲线表面,但是要花一点时间才能实现,而且速度很快,不建议初学者使用(但是如果您有兴趣,可以使用click on this link。第8章包含了您所需要的,但是您最好先阅读其他章节)。一个好的中间立场是Bicubic Interpolation。该链接包含双三次和双线性插值的视觉比较。

假设您是一个初学者,我还是建议您使用双线性。

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

10-09 13:47