for the GraphicsServer, expose a sync transform interval: only synchronize the transform once the stepSimulation exceeds this time interval.
(for example, run the simulation at 1kHz but sync the graphics transforms to remove graphics server at 30Hz)
This commit is contained in:
@@ -5501,6 +5501,19 @@ B3_SHARED_API void b3ConfigureOpenGLVisualizerSetShadowMapWorldSize(b3SharedMemo
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
B3_SHARED_API void b3ConfigureOpenGLVisualizerSetRemoteSyncTransformInterval(b3SharedMemoryCommandHandle commandHandle, double remoteSyncTransformInterval)
|
||||||
|
{
|
||||||
|
struct SharedMemoryCommand* command = (struct SharedMemoryCommand*)commandHandle;
|
||||||
|
b3Assert(command);
|
||||||
|
b3Assert(command->m_type == CMD_CONFIGURE_OPENGL_VISUALIZER);
|
||||||
|
if (command->m_type == CMD_CONFIGURE_OPENGL_VISUALIZER)
|
||||||
|
{
|
||||||
|
command->m_updateFlags |= COV_SET_REMOTE_SYNC_TRANSFORM_INTERVAL;
|
||||||
|
command->m_configureOpenGLVisualizerArguments.m_remoteSyncTransformInterval = remoteSyncTransformInterval;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
B3_SHARED_API void b3ConfigureOpenGLVisualizerSetViewMatrix(b3SharedMemoryCommandHandle commandHandle, float cameraDistance, float cameraPitch, float cameraYaw, const float cameraTargetPosition[3])
|
B3_SHARED_API void b3ConfigureOpenGLVisualizerSetViewMatrix(b3SharedMemoryCommandHandle commandHandle, float cameraDistance, float cameraPitch, float cameraYaw, const float cameraTargetPosition[3])
|
||||||
{
|
{
|
||||||
struct SharedMemoryCommand* command = (struct SharedMemoryCommand*)commandHandle;
|
struct SharedMemoryCommand* command = (struct SharedMemoryCommand*)commandHandle;
|
||||||
|
|||||||
@@ -210,6 +210,7 @@ extern "C"
|
|||||||
B3_SHARED_API void b3ConfigureOpenGLVisualizerSetLightPosition(b3SharedMemoryCommandHandle commandHandle, const float lightPosition[3]);
|
B3_SHARED_API void b3ConfigureOpenGLVisualizerSetLightPosition(b3SharedMemoryCommandHandle commandHandle, const float lightPosition[3]);
|
||||||
B3_SHARED_API void b3ConfigureOpenGLVisualizerSetShadowMapResolution(b3SharedMemoryCommandHandle commandHandle, int shadowMapResolution);
|
B3_SHARED_API void b3ConfigureOpenGLVisualizerSetShadowMapResolution(b3SharedMemoryCommandHandle commandHandle, int shadowMapResolution);
|
||||||
B3_SHARED_API void b3ConfigureOpenGLVisualizerSetShadowMapWorldSize(b3SharedMemoryCommandHandle commandHandle, int shadowMapWorldSize);
|
B3_SHARED_API void b3ConfigureOpenGLVisualizerSetShadowMapWorldSize(b3SharedMemoryCommandHandle commandHandle, int shadowMapWorldSize);
|
||||||
|
B3_SHARED_API void b3ConfigureOpenGLVisualizerSetRemoteSyncTransformInterval(b3SharedMemoryCommandHandle commandHandle, double remoteSyncTransformInterval);
|
||||||
|
|
||||||
B3_SHARED_API void b3ConfigureOpenGLVisualizerSetViewMatrix(b3SharedMemoryCommandHandle commandHandle, float cameraDistance, float cameraPitch, float cameraYaw, const float cameraTargetPosition[/*3*/]);
|
B3_SHARED_API void b3ConfigureOpenGLVisualizerSetViewMatrix(b3SharedMemoryCommandHandle commandHandle, float cameraDistance, float cameraPitch, float cameraYaw, const float cameraTargetPosition[/*3*/]);
|
||||||
|
|
||||||
|
|||||||
@@ -1595,7 +1595,7 @@ struct PhysicsServerCommandProcessorInternalData
|
|||||||
|
|
||||||
btScalar m_physicsDeltaTime;
|
btScalar m_physicsDeltaTime;
|
||||||
btScalar m_numSimulationSubSteps;
|
btScalar m_numSimulationSubSteps;
|
||||||
btScalar m_simulationTimestamp;
|
btScalar m_simulationTimestamp;
|
||||||
btAlignedObjectArray<btMultiBodyJointFeedback*> m_multiBodyJointFeedbacks;
|
btAlignedObjectArray<btMultiBodyJointFeedback*> m_multiBodyJointFeedbacks;
|
||||||
b3HashMap<btHashPtr, btInverseDynamics::MultiBodyTree*> m_inverseDynamicsBodies;
|
b3HashMap<btHashPtr, btInverseDynamics::MultiBodyTree*> m_inverseDynamicsBodies;
|
||||||
b3HashMap<btHashPtr, IKTrajectoryHelper*> m_inverseKinematicsHelpers;
|
b3HashMap<btHashPtr, IKTrajectoryHelper*> m_inverseKinematicsHelpers;
|
||||||
@@ -1672,6 +1672,9 @@ struct PhysicsServerCommandProcessorInternalData
|
|||||||
b3ThreadPool* m_threadPool;
|
b3ThreadPool* m_threadPool;
|
||||||
btScalar m_defaultCollisionMargin;
|
btScalar m_defaultCollisionMargin;
|
||||||
|
|
||||||
|
double m_remoteSyncTransformTime;
|
||||||
|
double m_remoteSyncTransformInterval;
|
||||||
|
|
||||||
PhysicsServerCommandProcessorInternalData(PhysicsCommandProcessorInterface* proc)
|
PhysicsServerCommandProcessorInternalData(PhysicsCommandProcessorInterface* proc)
|
||||||
: m_pluginManager(proc),
|
: m_pluginManager(proc),
|
||||||
m_useRealTimeSimulation(false),
|
m_useRealTimeSimulation(false),
|
||||||
@@ -1681,7 +1684,7 @@ struct PhysicsServerCommandProcessorInternalData
|
|||||||
m_logPlaybackUid(-1),
|
m_logPlaybackUid(-1),
|
||||||
m_physicsDeltaTime(1. / 240.),
|
m_physicsDeltaTime(1. / 240.),
|
||||||
m_numSimulationSubSteps(0),
|
m_numSimulationSubSteps(0),
|
||||||
m_simulationTimestamp(0),
|
m_simulationTimestamp(0),
|
||||||
m_userConstraintUIDGenerator(1),
|
m_userConstraintUIDGenerator(1),
|
||||||
m_broadphaseCollisionFilterCallback(0),
|
m_broadphaseCollisionFilterCallback(0),
|
||||||
m_pairCache(0),
|
m_pairCache(0),
|
||||||
@@ -1705,72 +1708,72 @@ struct PhysicsServerCommandProcessorInternalData
|
|||||||
m_collisionFilterPlugin(-1),
|
m_collisionFilterPlugin(-1),
|
||||||
m_grpcPlugin(-1),
|
m_grpcPlugin(-1),
|
||||||
m_threadPool(0),
|
m_threadPool(0),
|
||||||
m_defaultCollisionMargin(0.001)
|
m_defaultCollisionMargin(0.001),
|
||||||
|
m_remoteSyncTransformTime(1. / 30.),
|
||||||
|
m_remoteSyncTransformInterval(1. / 30.)
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
//register static plugins:
|
//register static plugins:
|
||||||
#ifdef STATIC_LINK_VR_PLUGIN
|
#ifdef STATIC_LINK_VR_PLUGIN
|
||||||
b3PluginFunctions funcs(initPlugin_vrSyncPlugin,exitPlugin_vrSyncPlugin, executePluginCommand_vrSyncPlugin);
|
b3PluginFunctions funcs(initPlugin_vrSyncPlugin, exitPlugin_vrSyncPlugin, executePluginCommand_vrSyncPlugin);
|
||||||
funcs.m_preTickFunc = preTickPluginCallback_vrSyncPlugin;
|
funcs.m_preTickFunc = preTickPluginCallback_vrSyncPlugin;
|
||||||
m_pluginManager.registerStaticLinkedPlugin("vrSyncPlugin", funcs);
|
m_pluginManager.registerStaticLinkedPlugin("vrSyncPlugin", funcs);
|
||||||
#endif //STATIC_LINK_VR_PLUGIN
|
#endif //STATIC_LINK_VR_PLUGIN
|
||||||
}
|
}
|
||||||
#ifndef SKIP_STATIC_PD_CONTROL_PLUGIN
|
#ifndef SKIP_STATIC_PD_CONTROL_PLUGIN
|
||||||
{
|
{
|
||||||
//int b3PluginManager::registerStaticLinkedPlugin(const char* pluginPath, PFN_INIT initFunc, PFN_EXIT exitFunc, PFN_EXECUTE executeCommandFunc, PFN_TICK preTickFunc, PFN_TICK postTickFunc, PFN_GET_RENDER_INTERFACE getRendererFunc, PFN_TICK processClientCommandsFunc, PFN_GET_COLLISION_INTERFACE getCollisionFunc, bool initPlugin)
|
//int b3PluginManager::registerStaticLinkedPlugin(const char* pluginPath, PFN_INIT initFunc, PFN_EXIT exitFunc, PFN_EXECUTE executeCommandFunc, PFN_TICK preTickFunc, PFN_TICK postTickFunc, PFN_GET_RENDER_INTERFACE getRendererFunc, PFN_TICK processClientCommandsFunc, PFN_GET_COLLISION_INTERFACE getCollisionFunc, bool initPlugin)
|
||||||
b3PluginFunctions funcs(initPlugin_pdControlPlugin,exitPlugin_pdControlPlugin,executePluginCommand_pdControlPlugin);
|
b3PluginFunctions funcs(initPlugin_pdControlPlugin, exitPlugin_pdControlPlugin, executePluginCommand_pdControlPlugin);
|
||||||
funcs.m_preTickFunc = preTickPluginCallback_pdControlPlugin;
|
funcs.m_preTickFunc = preTickPluginCallback_pdControlPlugin;
|
||||||
m_pdControlPlugin = m_pluginManager.registerStaticLinkedPlugin("pdControlPlugin", funcs);
|
m_pdControlPlugin = m_pluginManager.registerStaticLinkedPlugin("pdControlPlugin", funcs);
|
||||||
}
|
}
|
||||||
#endif //SKIP_STATIC_PD_CONTROL_PLUGIN
|
#endif //SKIP_STATIC_PD_CONTROL_PLUGIN
|
||||||
|
|
||||||
#ifndef SKIP_COLLISION_FILTER_PLUGIN
|
#ifndef SKIP_COLLISION_FILTER_PLUGIN
|
||||||
{
|
{
|
||||||
b3PluginFunctions funcs(initPlugin_collisionFilterPlugin,exitPlugin_collisionFilterPlugin, executePluginCommand_collisionFilterPlugin);
|
b3PluginFunctions funcs(initPlugin_collisionFilterPlugin, exitPlugin_collisionFilterPlugin, executePluginCommand_collisionFilterPlugin);
|
||||||
funcs.m_getCollisionFunc = getCollisionInterface_collisionFilterPlugin;
|
funcs.m_getCollisionFunc = getCollisionInterface_collisionFilterPlugin;
|
||||||
m_collisionFilterPlugin = m_pluginManager.registerStaticLinkedPlugin("collisionFilterPlugin", funcs );
|
m_collisionFilterPlugin = m_pluginManager.registerStaticLinkedPlugin("collisionFilterPlugin", funcs);
|
||||||
m_pluginManager.selectCollisionPlugin(m_collisionFilterPlugin);
|
m_pluginManager.selectCollisionPlugin(m_collisionFilterPlugin);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ENABLE_STATIC_GRPC_PLUGIN
|
#ifdef ENABLE_STATIC_GRPC_PLUGIN
|
||||||
{
|
{
|
||||||
b3PluginFunctions funcs(initPlugin_grpcPlugin, exitPlugin_grpcPlugin, executePluginCommand_grpcPlugin);
|
b3PluginFunctions funcs(initPlugin_grpcPlugin, exitPlugin_grpcPlugin, executePluginCommand_grpcPlugin);
|
||||||
funcs.m_processClientCommandsFunc = processClientCommands_grpcPlugin;
|
funcs.m_processClientCommandsFunc = processClientCommands_grpcPlugin;
|
||||||
m_grpcPlugin = m_pluginManager.registerStaticLinkedPlugin("grpcPlugin", funcs);
|
m_grpcPlugin = m_pluginManager.registerStaticLinkedPlugin("grpcPlugin", funcs);
|
||||||
}
|
}
|
||||||
#endif //ENABLE_STATIC_GRPC_PLUGIN
|
#endif //ENABLE_STATIC_GRPC_PLUGIN
|
||||||
|
|
||||||
#ifdef STATIC_EGLRENDERER_PLUGIN
|
#ifdef STATIC_EGLRENDERER_PLUGIN
|
||||||
{
|
{
|
||||||
bool initPlugin = false;
|
bool initPlugin = false;
|
||||||
b3PluginFunctions funcs(initPlugin_eglRendererPlugin, exitPlugin_eglRendererPlugin, executePluginCommand_eglRendererPlugin);
|
b3PluginFunctions funcs(initPlugin_eglRendererPlugin, exitPlugin_eglRendererPlugin, executePluginCommand_eglRendererPlugin);
|
||||||
funcs.m_getRendererFunc = getRenderInterface_eglRendererPlugin;
|
funcs.m_getRendererFunc = getRenderInterface_eglRendererPlugin;
|
||||||
int renderPluginId = m_pluginManager.registerStaticLinkedPlugin("eglRendererPlugin", funcs, initPlugin);
|
int renderPluginId = m_pluginManager.registerStaticLinkedPlugin("eglRendererPlugin", funcs, initPlugin);
|
||||||
m_pluginManager.selectPluginRenderer(renderPluginId);
|
m_pluginManager.selectPluginRenderer(renderPluginId);
|
||||||
}
|
}
|
||||||
#endif //STATIC_EGLRENDERER_PLUGIN
|
#endif //STATIC_EGLRENDERER_PLUGIN
|
||||||
|
|
||||||
#ifndef SKIP_STATIC_TINYRENDERER_PLUGIN
|
#ifndef SKIP_STATIC_TINYRENDERER_PLUGIN
|
||||||
{
|
{
|
||||||
b3PluginFunctions funcs(initPlugin_tinyRendererPlugin, exitPlugin_tinyRendererPlugin, executePluginCommand_tinyRendererPlugin);
|
b3PluginFunctions funcs(initPlugin_tinyRendererPlugin, exitPlugin_tinyRendererPlugin, executePluginCommand_tinyRendererPlugin);
|
||||||
funcs.m_getRendererFunc=getRenderInterface_tinyRendererPlugin;
|
funcs.m_getRendererFunc = getRenderInterface_tinyRendererPlugin;
|
||||||
int renderPluginId = m_pluginManager.registerStaticLinkedPlugin("tinyRendererPlugin", funcs);
|
int renderPluginId = m_pluginManager.registerStaticLinkedPlugin("tinyRendererPlugin", funcs);
|
||||||
m_pluginManager.selectPluginRenderer(renderPluginId);
|
m_pluginManager.selectPluginRenderer(renderPluginId);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef B3_ENABLE_FILEIO_PLUGIN
|
#ifdef B3_ENABLE_FILEIO_PLUGIN
|
||||||
{
|
{
|
||||||
b3PluginFunctions funcs(initPlugin_fileIOPlugin, exitPlugin_fileIOPlugin, executePluginCommand_fileIOPlugin);
|
b3PluginFunctions funcs(initPlugin_fileIOPlugin, exitPlugin_fileIOPlugin, executePluginCommand_fileIOPlugin);
|
||||||
funcs.m_fileIoFunc = getFileIOFunc_fileIOPlugin;
|
funcs.m_fileIoFunc = getFileIOFunc_fileIOPlugin;
|
||||||
int renderPluginId = m_pluginManager.registerStaticLinkedPlugin("fileIOPlugin", funcs);
|
int renderPluginId = m_pluginManager.registerStaticLinkedPlugin("fileIOPlugin", funcs);
|
||||||
m_pluginManager.selectFileIOPlugin(renderPluginId);
|
m_pluginManager.selectFileIOPlugin(renderPluginId);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
m_vrControllerEvents.init();
|
m_vrControllerEvents.init();
|
||||||
|
|
||||||
m_bodyHandles.exitHandles();
|
m_bodyHandles.exitHandles();
|
||||||
@@ -1812,7 +1815,7 @@ struct PhysicsServerCommandProcessorInternalData
|
|||||||
|
|
||||||
Eigen::VectorXd pose, vel;
|
Eigen::VectorXd pose, vel;
|
||||||
pose.resize(7 + multiBody->getNumPosVars());
|
pose.resize(7 + multiBody->getNumPosVars());
|
||||||
vel.resize(7 + multiBody->getNumPosVars()); //??
|
vel.resize(7 + multiBody->getNumPosVars()); //??
|
||||||
|
|
||||||
btTransform tr = multiBody->getBaseWorldTransform();
|
btTransform tr = multiBody->getBaseWorldTransform();
|
||||||
int dofsrc = 0;
|
int dofsrc = 0;
|
||||||
@@ -1868,49 +1871,48 @@ struct PhysicsServerCommandProcessorInternalData
|
|||||||
int dof = 7;
|
int dof = 7;
|
||||||
int veldof = 7;
|
int veldof = 7;
|
||||||
|
|
||||||
|
|
||||||
for (int l = 0; l < multiBody->getNumLinks(); l++)
|
for (int l = 0; l < multiBody->getNumLinks(); l++)
|
||||||
{
|
{
|
||||||
switch (multiBody->getLink(l).m_jointType)
|
switch (multiBody->getLink(l).m_jointType)
|
||||||
{
|
{
|
||||||
case btMultibodyLink::eRevolute:
|
case btMultibodyLink::eRevolute:
|
||||||
case btMultibodyLink::ePrismatic:
|
case btMultibodyLink::ePrismatic:
|
||||||
{
|
{
|
||||||
pose[dof++] = jointPositionsQ[dofsrc++];
|
pose[dof++] = jointPositionsQ[dofsrc++];
|
||||||
vel[veldof++] = jointVelocitiesQdot[velsrcdof++];
|
vel[veldof++] = jointVelocitiesQdot[velsrcdof++];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case btMultibodyLink::eSpherical:
|
case btMultibodyLink::eSpherical:
|
||||||
{
|
{
|
||||||
double quatXYZW[4];
|
double quatXYZW[4];
|
||||||
quatXYZW[0] = jointPositionsQ[dofsrc++];
|
quatXYZW[0] = jointPositionsQ[dofsrc++];
|
||||||
quatXYZW[1] = jointPositionsQ[dofsrc++];
|
quatXYZW[1] = jointPositionsQ[dofsrc++];
|
||||||
quatXYZW[2] = jointPositionsQ[dofsrc++];
|
quatXYZW[2] = jointPositionsQ[dofsrc++];
|
||||||
quatXYZW[3] = jointPositionsQ[dofsrc++];
|
quatXYZW[3] = jointPositionsQ[dofsrc++];
|
||||||
|
|
||||||
pose[dof++] = quatXYZW[3];
|
pose[dof++] = quatXYZW[3];
|
||||||
pose[dof++] = quatXYZW[0];
|
pose[dof++] = quatXYZW[0];
|
||||||
pose[dof++] = quatXYZW[1];
|
pose[dof++] = quatXYZW[1];
|
||||||
pose[dof++] = quatXYZW[2];
|
pose[dof++] = quatXYZW[2];
|
||||||
vel[veldof++] = jointVelocitiesQdot[velsrcdof++];
|
vel[veldof++] = jointVelocitiesQdot[velsrcdof++];
|
||||||
vel[veldof++] = jointVelocitiesQdot[velsrcdof++];
|
vel[veldof++] = jointVelocitiesQdot[velsrcdof++];
|
||||||
vel[veldof++] = jointVelocitiesQdot[velsrcdof++];
|
vel[veldof++] = jointVelocitiesQdot[velsrcdof++];
|
||||||
vel[veldof++] = jointVelocitiesQdot[velsrcdof++];
|
vel[veldof++] = jointVelocitiesQdot[velsrcdof++];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case btMultibodyLink::eFixed:
|
case btMultibodyLink::eFixed:
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
assert(0);
|
assert(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
btVector3 gravOrg = m_dynamicsWorld->getGravity();
|
btVector3 gravOrg = m_dynamicsWorld->getGravity();
|
||||||
tVector grav (gravOrg[0], gravOrg[1], gravOrg[2], 0);
|
tVector grav(gravOrg[0], gravOrg[1], gravOrg[2], 0);
|
||||||
rbdModel->SetGravity(grav);
|
rbdModel->SetGravity(grav);
|
||||||
rbdModel->Update(pose, vel);
|
rbdModel->Update(pose, vel);
|
||||||
|
|
||||||
@@ -7763,7 +7765,13 @@ bool PhysicsServerCommandProcessor::processForwardDynamicsCommand(const struct S
|
|||||||
}
|
}
|
||||||
serverCmd.m_type = CMD_STEP_FORWARD_SIMULATION_COMPLETED;
|
serverCmd.m_type = CMD_STEP_FORWARD_SIMULATION_COMPLETED;
|
||||||
|
|
||||||
syncPhysicsToGraphics2();
|
m_data->m_remoteSyncTransformTime += deltaTimeScaled;
|
||||||
|
if (m_data->m_remoteSyncTransformTime >= m_data->m_remoteSyncTransformInterval)
|
||||||
|
{
|
||||||
|
m_data->m_remoteSyncTransformTime = 0;
|
||||||
|
syncPhysicsToGraphics2();
|
||||||
|
}
|
||||||
|
|
||||||
return hasStatus;
|
return hasStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -9074,6 +9082,13 @@ bool PhysicsServerCommandProcessor::processConfigureOpenGLVisualizerCommand(cons
|
|||||||
m_data->m_guiHelper->getRenderInterface()->setShadowMapWorldSize(worldSize);
|
m_data->m_guiHelper->getRenderInterface()->setShadowMapWorldSize(worldSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (clientCmd.m_updateFlags & COV_SET_REMOTE_SYNC_TRANSFORM_INTERVAL)
|
||||||
|
{
|
||||||
|
m_data->m_remoteSyncTransformInterval = clientCmd.m_configureOpenGLVisualizerArguments.m_remoteSyncTransformInterval;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return hasStatus;
|
return hasStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -12047,7 +12062,8 @@ void PhysicsServerCommandProcessor::addTransformChangedNotifications()
|
|||||||
void PhysicsServerCommandProcessor::resetSimulation()
|
void PhysicsServerCommandProcessor::resetSimulation()
|
||||||
{
|
{
|
||||||
//clean up all data
|
//clean up all data
|
||||||
|
m_data->m_remoteSyncTransformTime = m_data->m_remoteSyncTransformInterval;
|
||||||
|
|
||||||
m_data->m_simulationTimestamp = 0;
|
m_data->m_simulationTimestamp = 0;
|
||||||
m_data->m_cachedVUrdfisualShapes.clear();
|
m_data->m_cachedVUrdfisualShapes.clear();
|
||||||
|
|
||||||
|
|||||||
@@ -908,6 +908,7 @@ enum InternalOpenGLVisualizerUpdateFlags
|
|||||||
COV_SET_LIGHT_POSITION = 4,
|
COV_SET_LIGHT_POSITION = 4,
|
||||||
COV_SET_SHADOWMAP_RESOLUTION = 8,
|
COV_SET_SHADOWMAP_RESOLUTION = 8,
|
||||||
COV_SET_SHADOWMAP_WORLD_SIZE = 16,
|
COV_SET_SHADOWMAP_WORLD_SIZE = 16,
|
||||||
|
COV_SET_REMOTE_SYNC_TRANSFORM_INTERVAL = 32,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ConfigureOpenGLVisualizerRequest
|
struct ConfigureOpenGLVisualizerRequest
|
||||||
@@ -919,6 +920,7 @@ struct ConfigureOpenGLVisualizerRequest
|
|||||||
double m_lightPosition[3];
|
double m_lightPosition[3];
|
||||||
int m_shadowMapResolution;
|
int m_shadowMapResolution;
|
||||||
int m_shadowMapWorldSize;
|
int m_shadowMapWorldSize;
|
||||||
|
double m_remoteSyncTransformInterval;
|
||||||
int m_setFlag;
|
int m_setFlag;
|
||||||
int m_setEnabled;
|
int m_setEnabled;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ radius=5
|
|||||||
t = 0
|
t = 0
|
||||||
p.configureDebugVisualizer(shadowMapWorldSize=5)
|
p.configureDebugVisualizer(shadowMapWorldSize=5)
|
||||||
p.configureDebugVisualizer(shadowMapResolution=8192)
|
p.configureDebugVisualizer(shadowMapResolution=8192)
|
||||||
|
|
||||||
while (1):
|
while (1):
|
||||||
t+=dt
|
t+=dt
|
||||||
p.configureDebugVisualizer(lightPosition=[radius*math.sin(t),radius*math.cos(t),3])
|
p.configureDebugVisualizer(lightPosition=[radius*math.sin(t),radius*math.cos(t),3])
|
||||||
|
|||||||
@@ -5874,12 +5874,13 @@ static PyObject* pybullet_configureDebugVisualizer(PyObject* self, PyObject* arg
|
|||||||
int shadowMapResolution = -1;
|
int shadowMapResolution = -1;
|
||||||
int shadowMapWorldSize = -1;
|
int shadowMapWorldSize = -1;
|
||||||
int physicsClientId = 0;
|
int physicsClientId = 0;
|
||||||
|
double remoteSyncTransformInterval = -1;
|
||||||
PyObject* pyLightPosition = 0;
|
PyObject* pyLightPosition = 0;
|
||||||
b3PhysicsClientHandle sm = 0;
|
b3PhysicsClientHandle sm = 0;
|
||||||
static char* kwlist[] = {"flag", "enable", "lightPosition", "shadowMapResolution", "shadowMapWorldSize", "physicsClientId", NULL};
|
static char* kwlist[] = {"flag", "enable", "lightPosition", "shadowMapResolution", "shadowMapWorldSize", "remoteSyncTransformInterval", "physicsClientId", NULL};
|
||||||
|
|
||||||
if (!PyArg_ParseTupleAndKeywords(args, keywds, "|iiOiii", kwlist,
|
if (!PyArg_ParseTupleAndKeywords(args, keywds, "|iiOiidi", kwlist,
|
||||||
&flag, &enable, &pyLightPosition, &shadowMapResolution, &shadowMapWorldSize, &physicsClientId))
|
&flag, &enable, &pyLightPosition, &shadowMapResolution, &shadowMapWorldSize, &remoteSyncTransformInterval, &physicsClientId))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
sm = getPhysicsClient(physicsClientId);
|
sm = getPhysicsClient(physicsClientId);
|
||||||
@@ -5911,6 +5912,10 @@ static PyObject* pybullet_configureDebugVisualizer(PyObject* self, PyObject* arg
|
|||||||
{
|
{
|
||||||
b3ConfigureOpenGLVisualizerSetShadowMapWorldSize(commandHandle, shadowMapWorldSize);
|
b3ConfigureOpenGLVisualizerSetShadowMapWorldSize(commandHandle, shadowMapWorldSize);
|
||||||
}
|
}
|
||||||
|
if (remoteSyncTransformInterval >= 0)
|
||||||
|
{
|
||||||
|
b3ConfigureOpenGLVisualizerSetRemoteSyncTransformInterval(commandHandle, remoteSyncTransformInterval);
|
||||||
|
}
|
||||||
|
|
||||||
b3SubmitClientCommandAndWaitStatus(sm, commandHandle);
|
b3SubmitClientCommandAndWaitStatus(sm, commandHandle);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user