Bullet Physics - 关于btHeightfieldTerrainShape的两个问题

Bullet Physics - Two Question about btHeightfieldTerrainShape

首先,我搜索了 btHeightfieldTerrainShape,然后我意识到构造函数不需要任何普通数据。它是通过地形高度 - 索引数据计算法线本身吗?

其次,参数void* heightfieldData有什么形式吗?我知道那必须是 heightDataType - 数组,但必须有 x - z 坐标或其他东西,但只有它得到的只是数组。这个有公式吗?

数组格式取决于 PHY_ScalarType 参数,它会被这样解释。

可以

  • unsigned char (value * heightScale)
  • 短(值 * heightScale)
  • 浮动(heightScale 被忽略)

数组是一个简单的“二维图像”,其中每个值代表该点的高度,某种形式的虚拟 grid/2d 地图。

分辨率设置为

int heightStickWidth, 
int heightStickLength,

在构造函数中。

因此您的数组的大小必须为 heightStickWidth*heightStickLength 个元素

在 4x4 网格的情况下,这在视觉上看起来像:

[0.0,-1.0,2.0,3.0,
 0.0,2.0,-1.0,-2.0
 5.0,10.0,-10.0,-2.0
5.0,10.0,-10.0,-2.0]

仰角轴取决于构造函数中的upAxis参数(0=X,1=Y,2=Z iirc)

另外不要忘记那种类型的形状的子弹,不会复制你的数组,所以你需要确保在你的形状仍然处于活动状态时不要删除它。