Sample 9 ではマテリアルカラーを利用した当たり判定処理です
Sample 8では毎フレーム、存在する全ての三角形との当たり判定をとっていましたが
それではかなりのコストがかかってしまうので
検索する三角形を、マテリアルごとに区切ってしまうってな処理です
実際の処理は
モデルごとの当たり判定→メッシュごとの当たり判定→マテリアルごとの当たり判定
全てが当たっていれば当たっているマテリアルの三角形判定をします
マテリアルのDiffuseとAmbient、Specularが習得できるので
その値に応じた処理も追加できます
判定を6方向にすれば、
360、PS3のソニックで有名なライトフィールド的な事も出来るのではと思っています
やり方は、Sample 8のCheckCollisionの部分を
- CollisionModel.CheckCollision(BoundlingSphere bs,CollisionModel colMehs,Vector3 startPosition,Vector3 endPosition,out Vector3 HitPosition,out Vector3 HitNormal);
- CollisionModel.CheckCollision(BoundlingSphere bs,CollisionModel colMehs,Vector3 startPosition,Vector3 endPosition,out Vector3 HitPosition,out Vector3 HitNormal,out MaterialColor matCol);
- BoundingSphereには判定元のBoundingSphere
- CollisionModelには三角形を検索するCollisionModel
- startPositionにはレイの開始位置
- endPisitionにはレイの終了位置
- HitPositionには当たった点の位置を習得するVector3
- HitNormalには当たった面の法線を習得するVector3
- で、マテリアルカラーを得たい場合は
- matColにMatrialColorを設定してください
Sample 8と違うのは、レイに終端があるってことですね
向きを設定するのではなく、ちゃんと終了位置を記述してください
コメント