bool Bullet::setup() { broadphase_ = new btDbvtBroadphase; ghostPairCallback_ = new btGhostPairCallback; broadphase_->getOverlappingPairCache()->setInternalGhostPairCallback(ghostPairCallback_); collisionConfiguration_ = new btDefaultCollisionConfiguration; dispatcher_ = new btCollisionDispatcher(collisionConfiguration_); solver_ = new btSequentialImpulseConstraintSolver; dynamicsWorld_ = new btDiscreteDynamicsWorld(dispatcher_, broadphase_, solver_, collisionConfiguration_); dynamicsWorld_->setGravity(toBullet(getGravityVector())); LOG_INFO << "Initialized Bullet " << (btGetVersion() / 100) << "." << (btGetVersion() % 100); return true; }
String Bullet::getEngineName() const { return String() + "Bullet " + (btGetVersion() / 100) + "." + (btGetVersion() % 100); }
int main(int argc, char** argv) { //#define CHECK_FPU_EXCEPTIONS 1 #ifdef CHECK_FPU_EXCEPTIONS int cw = _control87(0, 0); // Set the exception masks off, turn exceptions on cw &= ~(EM_ZERODIVIDE | EM_INVALID); printf("control87 = %#x\n", cw); // Set the control word _control87(cw, MCW_EM); #endif //CHECK_FPU_EXCEPTIONS setDefaultSettings(); int bulletVersion = btGetVersion(); printf("Bullet version %d\n",bulletVersion); glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE |GLUT_DEPTH | GLUT_STENCIL); glutInitWindowSize(width, height); mainWindow = glutCreateWindow("http://bulletphysics.com"); #ifdef BT_USE_FREEGLUT glutSetOption (GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_GLUTMAINLOOP_RETURNS); #endif entry = g_demoEntries + testIndex; demo = CreatDemo(entry); glutDisplayFunc(SimulationLoop); GLUI_Master.set_glutReshapeFunc(Resize); GLUI_Master.set_glutKeyboardFunc(Keyboard); GLUI_Master.set_glutSpecialFunc(KeyboardSpecial); GLUI_Master.set_glutSpecialUpFunc(KeyboardSpecialUp); GLUI_Master.set_glutMouseFunc(Mouse); glutMotionFunc(MouseMotion); glui = GLUI_Master.create_glui_subwindow( mainWindow, GLUI_SUBWINDOW_RIGHT ); glui->add_statictext("Tests"); GLUI_Listbox* testList = glui->add_listbox("", &testSelection); glui->add_button("Next Scene", 0,(GLUI_Update_CB)NextScene); glui->add_separator(); GLUI_Spinner* iterationSpinner = glui->add_spinner("Iterations", GLUI_SPINNER_INT, &iterationCount); iterationSpinner->set_int_limits(1, 250); /* GLUI_Spinner* hertzSpinner = glui->add_spinner("Hertz", GLUI_SPINNER_FLOAT, &hz); hertzSpinner->set_float_limits(5.0f, 200.0f); */ glui->add_checkbox("DisableDeactivation", &gDebugNoDeactivation); glui->add_checkbox("Split Impulse", &gUseSplitImpulse); GLUI_Spinner* spinner = 0; spinner = glui->add_spinner("ERP", GLUI_SPINNER_FLOAT, &gErp); // spinner->set_float_limits(0.f,1.f); // spinner = glui->add_spinner("ERP2", GLUI_SPINNER_FLOAT, &gErp2); spinner->set_float_limits(0.f,1.f); spinner = glui->add_spinner("Slop", GLUI_SPINNER_FLOAT, &gSlop); spinner->set_float_limits(0.f,1.f); // spinner = glui->add_spinner("WSP", GLUI_SPINNER_FLOAT,&gWarmStartingParameter); // spinner->set_float_limits (0.f,1.0); glui->add_checkbox("Warmstarting", &gUseWarmstarting); glui->add_checkbox("Randomize Constraints", &gRandomizeConstraints); glui->add_button("Reset Defaults", 0,(GLUI_Update_CB)setDefaultSettingsAndSync); glui->add_separator(); GLUI_Panel* drawPanel = glui->add_panel("Debug Draw"); glui->add_checkbox_to_panel(drawPanel, "AABBs", &gDrawAabb); glui->add_checkbox_to_panel(drawPanel, "Wireframe", &gWireFrame); glui->add_checkbox_to_panel(drawPanel, "Contacts", &gDebugContacts); glui->add_checkbox_to_panel(drawPanel, "Textures", &gDrawTextures); glui->add_checkbox_to_panel(drawPanel, "Shadows", &gDrawShadows); glui->add_checkbox_to_panel(drawPanel, "Clusters", &gDrawClusters); int testCount = 0; btDemoEntry* e = g_demoEntries; while (e->createFcn) { testList->add_item(testCount, e->name); ++testCount; ++e; } glui->add_separator(); glui->add_button("Toggle Pause", 0,(GLUI_Update_CB)TogglePause); glui->add_button("Single Step", 0,(GLUI_Update_CB)SingleSimulationStep); glui->add_button("Reset Scene", 0,(GLUI_Update_CB)ResetScene); glui->add_button("Restart Scene", 0,(GLUI_Update_CB)RestartScene); glui->add_separator(); // glui->add_button("Exit", 0,(GLUI_Update_CB)exit); glui->set_main_gfx_window( mainWindow ); // Use a timer to control the frame rate. glutTimerFunc(framePeriod, Timer, 0); glutMainLoop(); return 0; }