Si vous vous référez à ce tremblement d’écran tremblant provoqué par une explosion, j’ai essayé de l’implémenter dans mon prototype de jeu (c’est 2d mais devrait se traduire très bien en 3D, je l’espère). Regardez la vidéo sur youtube et voyez si c'est ce que vous cherchez - le tremblement de l'écran démarre environ à 1:35
Quoi qu’il en soit, j’ai réussi à créer une fenêtre pour l’écran et à stocker le point central ( centre).
Quand une explosion se déclenche, je crée un radiuséchantillon aléatoire de ~ 30 pixels. Je décale ensuite la fenêtre de centrece nombre de pixels dans une direction aléatoire.
Pour chaque mise à jour ultérieure (entre les tirages à l'écran), je réduis radiusde 10 à 20% et décale la vue de ce nombre de pixels à centrenouveau. Cependant, au lieu de choisir un angle aléatoire pour ce décalage, je prends l'angle précédent dans la fenêtre d'affichage centreet lui ajoute 180 +/- 60 degrés.
Donc, fondamentalement, chaque mise à jour (ou 10-20ms environ), je décale la fenêtre d'affichage d'un nombre décroissant de pixels à partir centrede l'écran.
Voici quelques pseudocodes:
viewportCentre = (400,300) //Lets say screen size is 800 x 600
radius = 30.0
randomAngle = rand()%360
offset = ( sin(randomAngle) * radius , cos(randomAngle) * radius) //create offset 2d vector
viewport.setCentre(viewportCentre + offset) // set centre of viewport
draw()
while(true) //update about every 10-20ms
{
radius *=0.9 //diminish radius each frame
randomAngle +=(180 +\- rand()%60) //pick new angle
offset = (sin(randomAngle) * radius , cos(randomAngle) * radius) //create offset 2d vector
viewport.setCentre(viewportCentre + offset) //set centre of viewport
draw() //redraw
}
J'arrête habituellement le tremblement de l'écran lorsque le rayon est inférieur à 2,0, point auquel je réinitialise à nouveau la fenêtre d'affichage centre.