2012-03-19 17 views
0

私はPhysX 3.2にアップグレードして、テストボックスを重力で移動させるのに数日間苦労していますが、PhysX 3.2:シンプルボックスダイナミックは移動しません

私はPhysXのドキュメントに従ってきましたが、私の方法で実装しました。

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

    } 

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

は、箱形を追加します。動的な俳優の作成

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

:これはかなりデフォルトの設定ですビジュアルデバッグを調べると私はボックスとフレームカウントが増加するのを見ることができます。しかし、それは動いていない。俳優と箱の形は正しい魅力を持っているようです。 LinearVelocityは負のY軸で増加し、その質量は33などです。しかし、ポーズはまだゼロ/同一です。私は何が欠けていますか?

答えて

0

解決済み。エラーは自分自身の論理にありました。 PhysXがグラフィックスを更新しようとしていた同期ロジックの問題がありましたが、私のポジショニングロジックがPhysXに以前の位置で更新するように指示していたのと同時に、だからそれは止まってしまい、決してシミュレートされなかったようだ。

関連する問題