PhysX 3.2: Простые динамические блоки не двигаются

Я обновился до PhysX 3.2 и несколько дней боролся за то, чтобы моя тестовая коробка двигалась под действием силы тяжести, но этого просто не произошло.

Я следовал документации PhysX, но реализовал ее по-своему. Это в значительной степени установка по умолчанию:

        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);

Создание динамического актера:

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

Добавьте форму коробки:

            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);
            }

Моделирование сцены как:

    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();

    }

Когда я смотрю в визуальный отладчик, я вижу, что поле и количество кадров увеличивается. Но он не движется. Актер и форма коробки, кажется, имеют правильные свойства. LinearVelocity увеличивается по отрицательной оси Y, его масса равна 33 и т. д. Но поза по-прежнему равна нулю/идентичности. Что мне не хватает?


person mrmclovin    schedule 19.03.2012    source источник


Ответы (1)


Решено. Ошибка была в моей собственной логике. Была проблема с логикой синхронизации, когда PhysX пытался обновить мою графику, в то время как моя логика позиционирования говорила PhysX обновить свою предыдущую позицию. Таким образом, он застрял и, похоже, никогда не моделировался.

person mrmclovin    schedule 20.03.2012