PhysX 3.2: простая коробка динамически не движется - PullRequest
0 голосов
/ 19 марта 2012

Я обновился до 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();

    }

Когда я смотрю в Visual Debugger, я вижу, что окно и количество кадров увеличиваются.Но это не движется.Форма актера и коробки, кажется, имеют правильные свойства.Линейная скорость увеличивается по отрицательной оси Y, ее масса равна 33 и т. Д. Но поза все равно равна нулю / идентичность.Чего мне не хватает?

1 Ответ

0 голосов
/ 20 марта 2012

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

...