Я ищу простой способ использовать отладочную отрисовку в очень простом приложении физики маркеров, чтобы развить мое понимание интерфейса для DebugDraw.Мой код, который в основном представляет собой код из [Demos/HelloWorld/
] 1 в пакете bullet3 , немного изменен для работы с современными объектами c ++ stl.Я посмотрел старый пост, но ни один из них не помог мне.Поддержка маркера для кода C ++ была отменена, что мне тоже не помогает
В коде я делаю следующее:
- Объявляю свойства мира
- Объявите мир и инициализируйте его с помощью свойств, объявленных в 1
- Объявите объект DebugDrawer и инициализируйте мир с помощью этого объекта
- Создайте твердые тела, инициализируйте их свойства и добавьте его вworld
- запустите симуляцию (и попытайтесь запустить 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 () 'будет размещен.Буду очень признателен за любую помощь.
спасибо