Se você está se referindo àquele tremor de tela trêmulo causado por uma explosão, tentei implementar isso no meu jogo de protótipo (é 2D, mas deve se traduzir muito bem em 3D, espero). Dê uma olhada no vídeo do youtube e veja se é isso que você está procurando - a vibração da tela começa cerca de 1:35
De qualquer forma, a maneira como consegui isso foi criar uma janela de visualização para o cenário e armazenar o ponto central ( centre).
Quando uma explosão começa, eu crio um aleatório radiusde ~ 30px. Em seguida, desloco a janela de visualização centrepor tantos pixels em uma direção aleatória.
Para cada atualização subsequente (entre os desenhos na tela), reduzo radiusde 10 a 20% e desloco a janela de visualização por muitos pixels centrenovamente. No entanto, em vez de escolher um ângulo aleatório para esse deslocamento, retiro o ângulo da viewport anterior centree adicionei 180 +/- 60 graus a ele.
Então, basicamente, a cada atualização (ou 10-20ms ou mais), eu compenso a janela de exibição por um número decrescente de pixels da centretela.
Aqui estão alguns pseudocódigo:
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
}
Normalmente, paro a trepidação da tela quando o raio fica menor que 2,0, quando redefino a janela de exibição centre.