【问题标题】:DebugDrawing in libGDXlibGDX 中的调试绘图
【发布时间】:2014-05-22 05:58:21
【问题描述】:

在 libGDX 中调试绘制子弹物理的正确方法是什么,以便我可以看到我正在设置的 btCollisionObjects

到目前为止,我有以下内容,但似乎没有出现 btCollisionObjects

public void render(float delta) {

    debugDrawer.begin(cam);
    collisionWorld.debugDrawWorld();
    debugDrawer.end();
    modelBatch.begin(cam);
    ...
    modelBatch.end();
}

@Override
public void show() {
    Bullet.init();
    ...         
    collisionConfig = new btDefaultCollisionConfiguration();
    dispatcher = new btCollisionDispatcher(collisionConfig);
    broadphase = new btDbvtBroadphase();
    collisionWorld = new btCollisionWorld(dispatcher, broadphase, collisionConfig);
    debugDrawer = new DebugDrawer();
    collisionWorld.setDebugDrawer(debugDrawer);
    debugDrawer.setDebugMode(btIDebugDraw.DebugDrawModes.DBG_MAX_DEBUG_DRAW_MODE);
}

【问题讨论】:

  • 您能尝试从模型批次开始/结束中获取调试绘图内容吗?另请注意,DebugDrawer 的内存存在严重问题。我认为它有内存泄漏。
  • 我已更新代码以反映我所做的更改。仍然看不到物体。
  • DebugDrawer 是来自测试的那个?它确实实现了一些回调?
  • 如果一切正常,我认为这与您提供的相机有关。在 DebugDrawer 回调中设置断点,看看它们是否根本没有被调用,或者它们是否只是被绘制到屏幕外。

标签: debugging libgdx bulletphysics


【解决方案1】:

希望这在事实发生 3 个月后仍然对您有所帮助,因为您的 sn-ps 绝对帮助了我! ;)

我将您的代码 sn-ps 放入我的应用程序中,并且能够使调试绘图正常工作。

为了记录,我使用的是 dynamicsWorld,但换掉了代码并且它可以工作。

dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher, broadphase, constraintSolver, collisionConfig);

我建议的一件事是在绘制模型和绘制调试时进行交换。如果您将调试放在第二位,它将最后绘制,因此位于模型之上。否则,您将体验到模型掩盖了调试绘图。试试这个:

public void render(float delta) {

    modelBatch.begin(cam);
    ...
    modelBatch.end();

    debugDrawer.begin(cam);
    collisionWorld.debugDrawWorld();
    debugDrawer.end();
}

【讨论】:

    【解决方案2】:

    将碰撞对象添加到碰撞世界对我有帮助。此外,我几乎找不到这方面的文档。我想知道 AWippler 在哪里找到了 libgdx 的 bullet3D 包装器的调试代码。其他有问题的人可以试试这个。

    @Override
    public void show() {
        Bullet.init();
        ...         
        collisionConfig = new btDefaultCollisionConfiguration();
        dispatcher = new btCollisionDispatcher(collisionConfig);
        broadphase = new btDbvtBroadphase();
        collisionWorld = new btCollisionWorld(dispatcher, broadphase, collisionConfig);
        for (Ball b : gameWorld.balls) {
            collisionWorld.addCollisionObject(b.getBallObject());
        }
        for (Brick b : gameWorld.bricks) {
            collisionWorld.addCollisionObject(b.getBrickObject());
        }
        debugDrawer = new DebugDrawer();
        collisionWorld.setDebugDrawer(debugDrawer);
        debugDrawer.setDebugMode(btIDebugDraw.DebugDrawModes.DBG_MAX_DEBUG_DRAW_MODE);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多