!!!ハードウェア(PPU)の使用(2006/09/20 更新) 物理演算が可能なボード(PPU)がささっているマシンでは そのハードウェアリソースが使用できるのかチェックして、使える場合は ハードウェアで物理演算ができるとよさげです。 !!ハードウェアが使用可能かチェック 「NxPhysicsSDK::getHWVersion」にて、ハードウェアが使用可能かどうか判定することができます。 bool IsPhysXHardwarePresent() { if(!g_pPhysicsSDK) return false; return (g_pPhysicsSDK->getHWVersion() != NX_HW_VERSION_NONE); } 「NxPhysicsSDK::getHWVersion」の戻り値は、NX_HW_VERSION_NONEとNX_HW_VERSION_ATHENA_1_0が現段階では存在し、後者はバージョンっぽい数値が 入っているため、たぶん今後は2_0とかなるのでしょう。 ですので、「g_pPhysicsSDK->getHWVersion() != NX_HW_VERSION_NONE」の 条件に当てはまる場合はハードウェアが利用できる、と判断します。 ハードウェアが使えるかどうかの判断は上記でOKです。 ただ、そのままではハードウェアの恩恵を受けることはできません。 フラグを立ててあげる必要があります。 !!PhysXのハードウェアを使用する NxSceneを作成する際に、NxSceneDescの「simType」「hwSceneType」にて 以下のように指定します。 // シーン情報を作成する NxSceneDesc sceneDesc; sceneDesc.gravity = NxVec3(0.0f, -9.8f, 0.0f); // 重力は鉛直下向き // ハードウェアが使えるかどうか判定 if(IsPhysXHardwarePresent()) { sceneDesc.simType = NX_SIMULATION_HW; // PhysXハードウェアを有効化 sceneDesc.hwSceneType = NX_HW_SCENE_TYPE_RB; // 剛体部分でハードウェアを使用 } // シーンを作成 g_pScene = g_pPhysicsSDK->createScene(sceneDesc); if(g_pScene == NULL) return false; 「IsPhysXHardwarePresent」は前に書いたハードウェアが使用できるかどうか判断するための関数です。 もしもハードウェアが使える場合は、「sceneDesc.simType」にNX_SIMULATION_HWを、 「sceneDesc.hwSceneType」にNX_HW_SCENE_TYPE_RBを指定します。 「sceneDesc.hwSceneType」では、 剛体の場合と流体の場合の2つを選択できるようです。 デフォルトの場合は、すべてがソフトウェアで物理計算されます。 その後createSceneを呼び出してシーンを作成します。 ハードウェア対応はこれだけです。 ただし、ハードウェアによってはアクターの数に制限があったり使用できない機能が存在したりします(現段階ではまだ未調査です)。