шаги для отображения графики с использованием отладки в движке физики маркеров - PullRequest
0 голосов
/ 25 ноября 2018

Я ищу простой способ использовать отладочную отрисовку в очень простом приложении физики маркеров, чтобы развить мое понимание интерфейса для DebugDraw.Мой код, который в основном представляет собой код из [Demos/HelloWorld/] 1 в пакете bullet3 , немного изменен для работы с современными объектами c ++ stl.Я посмотрел старый пост, но ни один из них не помог мне.Поддержка маркера для кода C ++ была отменена, что мне тоже не помогает

В коде я делаю следующее:

  1. Объявляю свойства мира
  2. Объявите мир и инициализируйте его с помощью свойств, объявленных в 1
  3. Объявите объект DebugDrawer и инициализируйте мир с помощью этого объекта
  4. Создайте твердые тела, инициализируйте их свойства и добавьте его вworld
  5. запустите симуляцию (и попытайтесь запустить debugDraw)

Код немного длинен, и я разместил только фрагмент, который дает представление о том, что я пытаюсьсделать.Моя версия всего кода hello world может быть найдена здесь

Фрагмент кода выглядит следующим образом:

int main(int argc, char *argv[])
{

    std::cout << "attempt to run hello world like program using modern c++ and with GUI debugDraw\n";

    //create the properties of the world
     . . .
     . . .

    // declare and initialize the world with the above properties
    btDiscreteDynamicsWorld* world = new btDiscreteDynamicsWorld(dispatcher, interface, solver, collisonConfig);
    world->setGravity(btVector3(0.0, -9.81, 0));

    //initialize visualization framework
    GLDebugDrawer *debugDraw = new GLDebugDrawer;
    debugDraw->setDebugMode(1); 
    world->setDebugDrawer(debugDraw); 


    //create placeholder for shapes, some kind of array
    std::vector<btCollisionShape*> collisionShapes;

    //Create and initialize multiple rigid  
    //bodies with specific properties
     . . .

    for(size_t i=0; i<collisionShapes.size(); ++i){

        //some more initialization code
        . . .
        . . .

        //adding the rigid bodies to the wold
        world->addRigidBody(rbody[i]);
    }

    //do some simulation
    for (size_t i = 0; i < 20; ++i) {
        world->stepSimulation(1.f/60.f, 10);

        //print positions of all objects
        for (int j = 0; j<world->getNumCollisionObjects(); ++j){

            btCollisionObject *obj = world->getCollisionObjectArray()[j];
            btRigidBody* bdy = btRigidBody::upcast(obj);

            if(bdy && bdy->getMotionState()){
                btTransform trans;
                bdy->getMotionState()->getWorldTransform(trans);

                //render the rigid bodies in the world
                //DOESN'T WORK
                world->debugDrawWorld();

                //this works 
                std::cout << "world pos: " << trans.getOrigin().getX() <<"\nY: " << trans.getOrigin().getY() << "\nZ:" << trans.getOrigin().getZ() << "\n";
            }
        }

    }

    releaseResources(collisionShapes, rbody, myMotionstate);

    return 0;
}

Этот код отлично работает, когда я запускаю его на bash,и печатает обновленные позиции твердых тел, но я не вижу экрана, который отображает объекты в графике.

Я не уверен, что еще мне не хватает и где должна стоять строка "world-> DebugDrawWorld () 'будет размещен.Буду очень признателен за любую помощь.

спасибо

...