Question

I've uppgraded to PhysX 3.2 and have been struggling for days to have my test box moved by gravity but it simply won't to it.

I've followed the PhysX documentation but implemented it in my way. It's pretty much a default setup:

        physx::PxSceneDesc sceneDesc = physx::PxSceneDesc((physx::PxTolerancesScale()));
        sceneDesc.gravity = physx::PxVec3(0.0f, -9.8f, 0.0f);
        if(!sceneDesc.cpuDispatcher)
        {
            physx::PxDefaultCpuDispatcher* mCpuDispatcher = physx::PxDefaultCpuDispatcherCreate(4);
            if(!mCpuDispatcher)
                LOG("PxDefaultCpuDispatcherCreate failed!");
            sceneDesc.cpuDispatcher    = mCpuDispatcher;
        }
        if(!sceneDesc.filterShader)
            sceneDesc.filterShader    = &physx::PxDefaultSimulationFilterShader;


        physxScene = physMgr->getSDK()->createScene(sceneDesc);

Creating the dynamic actor:

                PxRigidDynamic* body = mPxSDK->createRigidDynamic(Convert::toPxTransform(transform));
                PxRigidBodyExt::updateMassAndInertia(*body, 1.0f);
                mPxScene->addActor(*body);

Add the box shape:

            PxBoxGeometry geometry = PxBoxGeometry(Convert::toPxVector3(size));
            if(geometry.isValid())
            {
                PxMaterial* material = api->createMaterial(0.5f, 0.5f, 0.1f);
                PxShape* shape = createShape(actor, geometry, material);
                                    PxRigidBodyExt::updateMassAndInertia(*body, 33.0f);
            }

Simulating the scene as:

    float elapsedTime = float((float)mTime.getElapsedTime() / 1000.0f);
    mAccumulator += elapsedTime;
    if(mAccumulator < mStepSize)
    {
        return;
    }
    else
    {
        mAccumulator -= mStepSize;
        mPxScene->simulate(mStepSize);
        mDynamicBodySys->updateGameObjectPositions();
        mPxScene->fetchResults(true);
        mTime.restart();

    }

When I look into the Visual Debugger I can see the box and the frame count increasing. But it's not moving. The actor's and the box shape seem to have the correct propeties. LinearVelocity is increasing in negative Y axis, its mass is 33 etc. But the pose is still zero/identity. What am I missing?

Was it helpful?

Solution

Solved. The error was in my own logic. There was a sync logic problem where PhysX was trying to update my graphics while in the same time my positioning logic was telling PhysX to update with its previous position. So it got stuck and appeared to never be simulated.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top