【问题标题】:How to use bullets HeightfieldTerrainShape如何使用子弹高度场地形形状
【发布时间】:2019-05-21 20:55:25
【问题描述】:

我正在努力从 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 的预期格式是什么?我假设这只是浮点数的字节缓冲区?

【问题讨论】:

    标签: java bulletphysics jbullet


    【解决方案1】:

    第一个函数

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

    根据文档https://pybullet.org/Bullet/BulletFull/classbtHeightfieldTerrainShape.html#a90d823ba5f44871a0bcfce0174177223 是首选。

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

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

    【讨论】:

    • 好的,你的意思是“heightStickWidth”和“heightStickLength”应该是x和z轴上原子矩形的大小(假设y向上)。正确的? heightfieldData 应该是什么数据格式?我尝试了不同的方法将值存储在字节缓冲区中,但似乎都没有奏效。 (没有什么会导致其他刚体与形状发生碰撞)
    • 是的,这就是我的理论(我是通过阅读代码和文档形成的)。
    • 抱歉,这不是真的。在 HeightfieldTerrainShape 实现内部有一个断言语句:assert heightStickWidth > 1 : "bad width";。此外,变量 m_width 由 (heightStickWidth - 1) 初始化。所以它不能是地形的单个四边形的大小。还有其他想法吗?
    • 只是一个疯狂的猜测,但在这种情况下,“棍子”可能意味着“帖子”——就像栅栏上的栅栏柱一样,帖子的数量等于长度 + 1?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    相关资源
    最近更新 更多