GRAPHISME PAR ORDINATEUR SIF-1032
Contenu du cours 12 Détection des collisions Sphère/Plan Sphère/Cylindre Sphère/Sphère Modélisation physique de la réponse à une collision Rebondissement des sphères Effets spéciaux Explosion (son et image) Site NeHe: Leçon 30
Détection des collisions (Lesson 30) Algorithme
Détection des collisions (Sphère/Plan) Recherche du point de collision . P: le point d’intersection (hit point) A: le centre de la sphère c: la direction du rayon B: un point quelconque sur le plan n: normale au plan
Détection des collisions (Sphère/Plan) Recherche du point de collision L’intersection P est déduite à l’aide des relations suivantes Dans le plan Sur la droite E: point quelconque sur le rayon
Détection des collisions (Sphère/Plan) Recherche du point de collision Cas particulier (rayon parallèle au plan) Dans le projet Collision Detection (leçon 30) la fonction TestIntersionPlane() permet de trouver le point d’intersection d’un rayon avec un plan
Détection des collisions (Sphère/Cylindre) Recherche du point de collision Plus complexe que le cas Sphère/Plan Dans le projet Collision Detection (leçon 30) la fonction TestIntersionCylinder() permet de trouver le point d’intersection d’un rayon avec un cylindre
Détection des collisions (Sphère/Sphère) Recherche du point de collision Pour déterminer si deux sphères se touchent, nous pouvons calculer la distance entre les centres des deux sphères et déterminer si cette distance est plus petite ou égale à la somme des rayons des sphères Lorsque les sphères sont mobiles, il faut trouver un autre moyen pour déterminer si une collision peut survenir
Détection des collisions (Sphère/Sphère) Recherche du point de collision Si deux sphères se déplacent d’un point à un autre durant un intervalle de temps, leur trajectoire se croise mais une collision ne surviendra pas nécessairement
Détection des collisions (Sphère/Sphère) Lorsque les formes des objets d’une scène sont complexes ou que les équations de détection de collisions ne sont pas disponibles ou quelles ne peuvent être résolues, une autre méthode de détection de collisions doit être utilisée Une nouvelle approche basée sur les points de départ et de fin des objets (ex: sphère) découlant de la direction de leur déplacement, de leur vitesse et d’un intervalle de temps, est implémentée Dans le projet Collision Detection (leçon 30) la fonction FindBallColl() permet de trouver les paires de sphères qui se touchent dans un intervalle de temps donné, leur point d’intersection et le temps de la collision
Détection des collisions (Sphère/Sphère) Détection de collisions dans un contexte d’objets mobiles Après avoir déterminé la position d’une collision potentielle il faut alors déterminer si l’intersection des trajectoires signifie que les objets entreront en collision
Détection des collisions (Sphère/Sphère) Détection de collisions dans un contexte d’objets mobiles Pour déterminer si une collision surviendra il faut: Calculer pour un intervalle de temps donnée la distance (Dst) entre le point de départ et le point de fin de la trajectoire de l’objet en fonction de sa vitesse et de sa direction Calculer la distance (Dsc) entre le point de départ et le point de collision potentielle SI Dsc < Dst ALORS une collision est imminente Pour calculer la position exacte de cette collision, nous pouvons calculer en premier lieu le temps Tc de l’impact par: Tc = Dsc * T/Dst où T est l’intervalle de temps considéré Le point d’impact est alors donné par: Pc = S + V*Tc où S est le point de départ de l’objet mobile Pc le point d’impact et V la vitesse de déplacement
Modélisation physique de la réponse à une collision Quand un objet entre en collision avec une surface d’un objet statique, il rebondit et change par le fait même de direction L’angle de la nouvelle direction est donnée par: I et N sont des vecteurs unitaires Le vecteur vitesse normalisé peut être substitué à I
Modélisation physique de la réponse à une collision Quand deux sphères mobiles entrent en collision, il faut alors déterminer la direction et la vitesse de déplacement de chacune des sphères U1 et U2 sont les vecteurs vitesse au moment de l’impact X_Axis est le vecteur entre les centres des sphères U1x et U2x sont les projections des vecteurs vitesse U1 et U2 sur X_Axis U1y et U2y sont les projections des vecteurs vitesse U1 et U2 sur l’axe perpendiculaire à l’axe X_Axis
Modélisation physique de la réponse à une collision Pour trouver ces vecteurs, nous devons aussi considérer la masse de chaque sphère (M1, M2) Nous trouvons alors V1 et V2 les vecteurs vitesse découlant de l’impact des deux sphères Détermination de l’axe X_Axis
Modélisation physique de la réponse à une collision Nous trouvons alors V1 et V2 les vecteurs vitesse découlant de l’impact des deux sphères Détermination des projections
Modélisation physique de la réponse à une collision Nous trouvons alors V1 et V2 les vecteurs vitesse découlant de l’impact des deux sphères Détermination des nouvelles vitesses
Modélisation physique de la réponse à une collision Nous trouvons alors V1 et V2 les vecteurs vitesse découlant de l’impact des deux sphères Détermination des vitesses finales
Modélisation physique de la réponse à une collision Nous trouvons alors V1 et V2 les vecteurs vitesse découlant de l’impact des deux sphères
Effets spéciaux A chaque fois qu’une collision survient (Projet Collision Detection), deux textures centrées au point d’impact sont affichées avec un coefficient d’opacité qui diminue dans le temps tandis que sa dimension augmente A chaque fois qu’une collision survient entre deux sphères le fichier explode.wav est joué
Effets spéciaux (effets visuels:DrawGLScene())
Effets spéciaux (effets visuels: initGL())
Projet Collision Detection
Projet Collision Detection
Projet Collision Detection