如何使用子弹物理引擎的HeightfieldTerrainShape?

3
我很难理解如何使用JBullet物理库中的HeightfieldTerrainShape。看起来有2个可用的构造函数:

public HeightfieldTerrainShape(int heightStickWidth, int heightStickLength, byte[] heightfieldData,
            float heightScale, float minHeight, float maxHeight, int upAxis, PHY_ScalarType heightDataType,
            boolean flipQuadEdges)

并且

public HeightfieldTerrainShape(int heightStickWidth, int heightStickLength, byte[] heightfieldData,
        float maxHeight, int upAxis, boolean useFloatData, boolean flipQuadEdges)

heightScaleminHeightmaxHeightupAxis都很明显,但是什么是“heightStick”?我该如何确定它的宽度和长度?heightfieldData期望的格式是什么?我假设这只是一个浮点数的字节缓冲区?

1个回答

3

第一个函数

public HeightfieldTerrainShape(int heightStickWidth, int heightStickLength, byte[] heightfieldData, float heightScale, float minHeight, float maxHeight, int upAxis, PHY_ScalarType heightDataType, boolean flipQuadEdges)

根据文档,btHeightfieldTerrainShape是首选。

通过文档(和cpp代码),似乎原子矩形表面的矩形大小代表您定义的表面(地形)。

例如,如果宽度和高度为1,您的地形为10 x 10(x和y),那么将有10 x 10 = 100个这样的矩形来表示您的地形。


1
好的,你的意思是"heightStickWidth"和"heightStickLength"应该是原子矩形在x和z轴上的大小(假设y为向上)。对吗?那么"heightfieldData"应该是什么数据格式呢?我尝试了不同的方法来存储字节缓冲区中的值,但似乎都没有起作用。(没有导致其他刚体与形状碰撞) - theCNG27
是的,那是我的理论(我从阅读代码和文档中形成的)。 - Edward Aung
1
抱歉,但那不可能是真的。在HeightfieldTerrainShape实现中有一个assert语句:assert heightStickWidth > 1 : "bad width";。此外,变量m_width通过(heightStickWidth - 1)进行初始化。因此它不能是地形单个四边形的大小。还有其他想法吗? - theCNG27
只是一个猜测,也许在这种情况下,“stick”的意思是“帖子”——就像篱笆中的栅栏帖子一样,帖子的数量等于长度+1? - Talin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接