首页 > 解决方案 > Physx:为什么这些刚体永远不会静止?

问题描述

我正在使用 Physx-4.1,一切正常,除了我偶尔会遇到一个问题,即我的刚体在放置在表面上时基本上会抖动/摆动。我不确定如何标记这个问题,如何处理它,或者它来自哪里。大多数情况下这不会发生,我可以在一个场景中有三个立方体,也许只有一个会这样做。

世界坐标中的这个立方体将在每个坐标中来回摇晃约 0.02 或 0.03。地形是静态动态actor,立方体是动态actor。我从顶点数据中烹制了两者,这是迄今为止我遇到的唯一问题。

在此处输入图像描述 在此处输入图像描述

这是我用来创建场景/物理的代码。

void Physics::initPhysics()
{
    m_foundation = PxCreateFoundation(PX_PHYSICS_VERSION, m_allocator, m_error_callback);
    m_pvd = physx::PxCreatePvd(*m_foundation);
    physx::PxPvdTransport* transport = physx::PxDefaultPvdSocketTransportCreate(PVD_HOST, 5425, 10);
    m_pvd->connect(*transport, physx::PxPvdInstrumentationFlag::eALL);

    m_scale.length = 1;   // typical length of an object
    m_scale.speed  = 10;  // typical speed of an object

    m_physics = PxCreatePhysics(PX_PHYSICS_VERSION, *m_foundation, m_scale, true, m_pvd);
    PxInitExtensions(*m_physics, m_pvd);
    m_material = m_physics->createMaterial(0.5f, 0.5f, 0.5f);
    m_dispatcher             = physx::PxDefaultCpuDispatcherCreate(2);
    m_cooking                = PxCreateCooking(PX_PHYSICS_VERSION, *m_foundation, physx::PxCookingParams(m_scale));
    m_serialization_registry = physx::PxSerialization::createSerializationRegistry(*m_physics);
}

void Physics::addScene(const std::string& name)
{
    physx::PxSceneDesc scene_desc(m_scale);
    scene_desc.gravity       = physx::PxVec3(0.0f, 0.0f, -9.81f);
    scene_desc.cpuDispatcher = m_dispatcher;
    scene_desc.filterShader  = physx::PxDefaultSimulationFilterShader;
    m_scenes[name]           = m_physics->createScene(scene_desc);
}

我试过玩弄m_material,尤其是恢复系数。它可能会解决问题,但如果我改变立方体的初始方向,它最终会再次弹出。我还尝试在子步骤中模拟物理,看看是否增加了稳定性而没有变化。

标签: c++game-physicsphysics-enginephysx

解决方案


推荐阅读