From b0aef4466854e66de75b2f5015d8008be86921d5 Mon Sep 17 00:00:00 2001 From: Erik Ogenvik Date: Mon, 13 Mar 2017 21:20:38 +0100 Subject: [PATCH 1/3] Make it compile on Linux. I simply copied from BasicDemo/CMakeList.txt --- examples/RobotSimulator/CMakeLists.txt | 29 ++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/examples/RobotSimulator/CMakeLists.txt b/examples/RobotSimulator/CMakeLists.txt index 0dbf71053..c9e0a66c3 100644 --- a/examples/RobotSimulator/CMakeLists.txt +++ b/examples/RobotSimulator/CMakeLists.txt @@ -138,8 +138,34 @@ IF(BUILD_CLSOCKET) ) ENDIF() -ADD_EXECUTABLE(App_RobotSimulator ${RobotSimulator_SRCS}) +#some code to support OpenGL and Glew cross platform +IF (WIN32) + INCLUDE_DIRECTORIES( + ${BULLET_PHYSICS_SOURCE_DIR}/btgui/OpenGLWindow/GlewWindows + ) + ADD_DEFINITIONS(-DGLEW_STATIC) + LINK_LIBRARIES( ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ) +ELSE(WIN32) + IF(APPLE) + find_library(COCOA NAMES Cocoa) + MESSAGE(${COCOA}) + link_libraries(${COCOA} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY}) + + ELSE(APPLE) + INCLUDE_DIRECTORIES( + ${BULLET_PHYSICS_SOURCE_DIR}/btgui/OpenGLWindow/GlewWindows + ) + ADD_DEFINITIONS("-DGLEW_INIT_OPENGL11_FUNCTIONS=1") + ADD_DEFINITIONS("-DGLEW_STATIC") + ADD_DEFINITIONS("-DGLEW_DYNAMIC_LOAD_ALL_GLX_FUNCTIONS=1") + + LINK_LIBRARIES( pthread dl ) + ENDIF(APPLE) +ENDIF(WIN32) + + +ADD_EXECUTABLE(App_RobotSimulator ${RobotSimulator_SRCS}) SET_TARGET_PROPERTIES(App_RobotSimulator PROPERTIES VERSION ${BULLET_VERSION}) SET_TARGET_PROPERTIES(App_RobotSimulator PROPERTIES DEBUG_POSTFIX "_d") @@ -153,7 +179,6 @@ ENDIF(WIN32) - TARGET_LINK_LIBRARIES(App_RobotSimulator BulletExampleBrowserLib BulletFileLoader BulletWorldImporter BulletSoftBody BulletDynamics BulletCollision BulletInverseDynamicsUtils BulletInverseDynamics LinearMath OpenGLWindow gwen BussIK Bullet3Common) From f159998220cdb521cc53abbf36585e10a2d5c039 Mon Sep 17 00:00:00 2001 From: Erik Ogenvik Date: Tue, 14 Mar 2017 22:07:06 +0100 Subject: [PATCH 2/3] Added test for btKinematicCharacterController. For now just a simple instantiation unit test. --- test/BulletDynamics/CMakeLists.txt | 24 +++++++++++++++++ .../test_btKinematicCharacterController.cpp | 27 +++++++++++++++++++ test/CMakeLists.txt | 2 +- 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 test/BulletDynamics/CMakeLists.txt create mode 100644 test/BulletDynamics/test_btKinematicCharacterController.cpp diff --git a/test/BulletDynamics/CMakeLists.txt b/test/BulletDynamics/CMakeLists.txt new file mode 100644 index 000000000..ceeb2b4f4 --- /dev/null +++ b/test/BulletDynamics/CMakeLists.txt @@ -0,0 +1,24 @@ +SUBDIRS(pendulum ) + +INCLUDE_DIRECTORIES( + "${PROJECT_SOURCE_DIR}/src" + "${PROJECT_SOURCE_DIR}/test/gtest-1.7.0/include") + +ADD_DEFINITIONS(-DUSE_GTEST) +ADD_DEFINITIONS(-D_VARIADIC_MAX=10) + +LINK_LIBRARIES(BulletDynamics BulletCollision LinearMath gtest) + +IF (NOT WIN32) + LINK_LIBRARIES(pthread) +ENDIF() + +ADD_EXECUTABLE(Test_btKinematicCharacterController test_btKinematicCharacterController.cpp) + +ADD_TEST(Test_btKinematicCharacterController_PASS Test_btKinematicCharacterController) + +IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) + SET_TARGET_PROPERTIES(Test_btKinematicCharacterController PROPERTIES DEBUG_POSTFIX "_Debug") + SET_TARGET_PROPERTIES(Test_btKinematicCharacterController PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") + SET_TARGET_PROPERTIES(Test_btKinematicCharacterController PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") +ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) diff --git a/test/BulletDynamics/test_btKinematicCharacterController.cpp b/test/BulletDynamics/test_btKinematicCharacterController.cpp new file mode 100644 index 000000000..4b0a567c0 --- /dev/null +++ b/test/BulletDynamics/test_btKinematicCharacterController.cpp @@ -0,0 +1,27 @@ + + +#include +#include +#include +#include + + +GTEST_TEST(BulletDynamics, KinematicCharacterController) { + + btPairCachingGhostObject* ghostObject = new btPairCachingGhostObject(); + btBoxShape* convexShape = new btBoxShape(btVector3(1, 1, 1)); + + //For now only a simple test that it initializes correctly. + btKinematicCharacterController* tested = new btKinematicCharacterController(ghostObject, convexShape, 1); + EXPECT_TRUE(tested); + + EXPECT_FLOAT_EQ(-9.8 * 3.0, tested->getGravity().x()); + EXPECT_FLOAT_EQ(0, tested->getGravity().y()); + EXPECT_FLOAT_EQ(0, tested->getGravity().z()); +} + + +int main(int argc, char **argv) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} \ No newline at end of file diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 713e4937e..ff1da9bff 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -3,5 +3,5 @@ IF(BUILD_BULLET3) SUBDIRS( InverseDynamics SharedMemory ) ENDIF(BUILD_BULLET3) -SUBDIRS( gtest-1.7.0 collision RobotLogging BulletDynamics/pendulum ) +SUBDIRS( gtest-1.7.0 collision RobotLogging BulletDynamics ) From 4ee09c264ce8941ffd7b9ab20b8de1efa6c78abc Mon Sep 17 00:00:00 2001 From: Erik Ogenvik Date: Tue, 14 Mar 2017 22:07:56 +0100 Subject: [PATCH 3/3] Avoid using unitialized values. m_gravity was used before it was initialized. Simplest way to avoid it is to call any method first after all values are initialized. --- .../Character/btKinematicCharacterController.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/BulletDynamics/Character/btKinematicCharacterController.cpp b/src/BulletDynamics/Character/btKinematicCharacterController.cpp index 06429f349..cb1aa71a1 100644 --- a/src/BulletDynamics/Character/btKinematicCharacterController.cpp +++ b/src/BulletDynamics/Character/btKinematicCharacterController.cpp @@ -137,8 +137,6 @@ btKinematicCharacterController::btKinematicCharacterController (btPairCachingGho m_ghostObject = ghostObject; m_up.setValue(0.0f, 0.0f, 1.0f); m_jumpAxis.setValue(0.0f, 0.0f, 1.0f); - setUp(up); - setStepHeight(stepHeight); m_addedMargin = 0.02; m_walkDirection.setValue(0.0,0.0,0.0); m_AngVel.setValue(0.0, 0.0, 0.0); @@ -156,13 +154,16 @@ btKinematicCharacterController::btKinematicCharacterController (btPairCachingGho m_wasOnGround = false; m_wasJumping = false; m_interpolateUp = true; - setMaxSlope(btRadians(45.0)); m_currentStepOffset = 0.0; m_maxPenetrationDepth = 0.2; full_drop = false; bounce_fix = false; m_linearDamping = btScalar(0.0); m_angularDamping = btScalar(0.0); + + setUp(up); + setStepHeight(stepHeight); + setMaxSlope(btRadians(45.0)); } btKinematicCharacterController::~btKinematicCharacterController ()