diff --git a/examples/Importers/ImportObjDemo/Wavefront2GLInstanceGraphicsShape.cpp b/examples/Importers/ImportObjDemo/Wavefront2GLInstanceGraphicsShape.cpp index a83ac9c31..4504fb7fe 100644 --- a/examples/Importers/ImportObjDemo/Wavefront2GLInstanceGraphicsShape.cpp +++ b/examples/Importers/ImportObjDemo/Wavefront2GLInstanceGraphicsShape.cpp @@ -33,6 +33,10 @@ GLInstanceGraphicsShape* btgCreateGraphicsShapeFromWavefrontObj(std::vectorsize(); + if (f<0 && f>=shape.mesh.indices.size()) + { + continue; + } GLInstanceVertex vtx0; vtx0.xyzw[0] = shape.mesh.positions[shape.mesh.indices[f]*3+0]; @@ -40,10 +44,22 @@ GLInstanceGraphicsShape* btgCreateGraphicsShapeFromWavefrontObj(std::vector=0 && uv1Index>=0 && (uv0Index < shape.mesh.texcoords.size()) && (uv1Index < shape.mesh.texcoords.size())) + { + vtx0.uv[0] = shape.mesh.texcoords[uv0Index]; + vtx0.uv[1] = shape.mesh.texcoords[uv1Index]; + } else + { + b3Warning("obj texture coordinate out-of-range!"); + vtx0.uv[0] = 0; + vtx0.uv[1] = 0; + } + } else { vtx0.uv[0] = 0.5; @@ -58,8 +74,18 @@ GLInstanceGraphicsShape* btgCreateGraphicsShapeFromWavefrontObj(std::vector=0 && uv1Index>=0 && (uv0Index < shape.mesh.texcoords.size()) && (uv1Index < shape.mesh.texcoords.size())) + { + vtx1.uv[0] = shape.mesh.texcoords[uv0Index]; + vtx1.uv[1] = shape.mesh.texcoords[uv1Index]; + } else + { + b3Warning("obj texture coordinate out-of-range!"); + vtx1.uv[0] = 0; + vtx1.uv[1] = 0; + } } else { vtx1.uv[0] = 0.5f; @@ -73,8 +99,18 @@ GLInstanceGraphicsShape* btgCreateGraphicsShapeFromWavefrontObj(std::vector=0 && uv1Index>=0 && (uv0Index < shape.mesh.texcoords.size()) && (uv1Index < shape.mesh.texcoords.size())) + { + vtx2.uv[0] = shape.mesh.texcoords[uv0Index]; + vtx2.uv[1] = shape.mesh.texcoords[uv1Index]; + } else + { + b3Warning("obj texture coordinate out-of-range!"); + vtx2.uv[0] = 0; + vtx2.uv[1] = 0; + } } else { vtx2.uv[0] = 0.5; diff --git a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp index 43f76cf60..3a68fcc69 100644 --- a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp +++ b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp @@ -27,7 +27,9 @@ #include "../CommonInterfaces/CommonGUIHelperInterface.h" #include "SharedMemoryCommands.h" +//@todo(erwincoumans) those globals are hacks for a VR demo, move this to Python/pybullet! btVector3 gLastPickPos(0, 0, 0); +bool gCloseToKuka=false; bool gEnableRealTimeSimVR=false; int gCreateObjectSimVR = -1; btScalar simTimeScalingFactor = 1; @@ -2931,8 +2933,9 @@ btVector3 gVRGripperPos(0,0,0.2); btQuaternion gVRGripperOrn(0,0,0,1); btVector3 gVRController2Pos(0,0,0.2); btQuaternion gVRController2Orn(0,0,0,1); - +btScalar gVRGripper2Analog = 0; btScalar gVRGripperAnalog = 0; + bool gVRGripperClosed = false; @@ -3146,7 +3149,7 @@ void PhysicsServerCommandProcessor::stepSimulationRealTime(double dtInSec) btMultiBodyJointMotor* motor = (btMultiBodyJointMotor*)childBody->m_multiBody->getLink(1).m_userPtr; if (motor) { - btScalar posTarget = (-0.048)*btMin(btScalar(0.75), gVRGripperAnalog) / 0.75; + btScalar posTarget = (-0.048)*btMin(btScalar(0.75), gVRGripper2Analog) / 0.75; motor->setPositionTarget(posTarget, .2); motor->setVelocityTarget(0.0, .5); motor->setMaxAppliedImpulse(5.0); @@ -3196,7 +3199,7 @@ void PhysicsServerCommandProcessor::stepSimulationRealTime(double dtInSec) btMultiBody* mb = bodyHandle->m_multiBody; btScalar sqLen = (mb->getBaseWorldTransform().getOrigin() - gVRController2Pos).length2(); btScalar distanceThreshold = 1.3; - bool closeToKuka=(sqLen<(distanceThreshold*distanceThreshold)); + gCloseToKuka=(sqLen<(distanceThreshold*distanceThreshold)); int numDofs = bodyHandle->m_multiBody->getNumDofs(); btAlignedObjectArray q_new; @@ -3217,7 +3220,7 @@ void PhysicsServerCommandProcessor::stepSimulationRealTime(double dtInSec) q_new[5] = -SIMD_HALF_PI*0.66; q_new[6] = 0; - if (closeToKuka) + if (gCloseToKuka) { double dampIk[6] = {1.0, 1.0, 1.0, 1.0, 1.0, 0.0}; diff --git a/examples/SharedMemory/PhysicsServerExample.cpp b/examples/SharedMemory/PhysicsServerExample.cpp index 388a0dba7..4b2cb34c9 100644 --- a/examples/SharedMemory/PhysicsServerExample.cpp +++ b/examples/SharedMemory/PhysicsServerExample.cpp @@ -16,6 +16,7 @@ #define MAX_VR_CONTROLLERS 8 +//@todo(erwincoumans) those globals are hacks for a VR demo, move this to Python/pybullet! extern btVector3 gLastPickPos; btVector3 gVRTeleportPos(0,0,0); btQuaternion gVRTeleportOrn(0, 0, 0,1); @@ -24,6 +25,8 @@ extern btQuaternion gVRGripperOrn; extern btVector3 gVRController2Pos; extern btQuaternion gVRController2Orn; extern btScalar gVRGripperAnalog; +extern btScalar gVRGripper2Analog; +extern bool gCloseToKuka; extern bool gEnableRealTimeSimVR; extern int gCreateObjectSimVR; static int gGraspingController = -1; @@ -191,12 +194,15 @@ void MotionThreadFunc(void* userPtr,void* lsMemory) args->m_physicsServerPtr->removePickingConstraint(); } - if (args->m_isVrControllerPicking[c]) + if (!gCloseToKuka) { - args->m_isVrControllerPicking[c] = false; - args->m_isVrControllerDragging[c] = true; - args->m_physicsServerPtr->pickBody(from,-toZ); - //printf("PICK!\n"); + if (args->m_isVrControllerPicking[c]) + { + args->m_isVrControllerPicking[c] = false; + args->m_isVrControllerDragging[c] = true; + args->m_physicsServerPtr->pickBody(from,-toZ); + //printf("PICK!\n"); + } } if (args->m_isVrControllerDragging[c]) @@ -1254,6 +1260,7 @@ void PhysicsServerExample::vrControllerMoveCallback(int controllerId, float pos[ } else { + gVRGripper2Analog = analogAxis; gVRController2Pos.setValue(pos[0] + gVRTeleportPos[0], pos[1] + gVRTeleportPos[1], pos[2] + gVRTeleportPos[2]); btQuaternion orgOrn(orn[0], orn[1], orn[2], orn[3]); gVRController2Orn = orgOrn*btQuaternion(btVector3(0, 0, 1), SIMD_HALF_PI)*btQuaternion(btVector3(0, 1, 0), SIMD_HALF_PI);