Per l'effettiva matematica della deformazione, questo può diventare molto complicato, perché non inizi qui? .
Ora parlerò di come puoi applicarlo, supponendo che tu abbia già ottenuto la matematica su come farai giù le tue deformazioni.
2 modi:
1) Ogni fotogramma, visita ogni vertice nel modello di cilindro e sfalsalo in qualche modo.
2) Offset i vertici nello shader di vertice durante il rendering. OpenGL ES 2.0 supporta shader di vertici. Quindi sei fortunato, in un certo senso.
Vuoi deformare l'oggetto così come appare sullo schermo o vuoi deformare l'oggetto in modo che ogni oggetto nel gioco sappia che è stato deformato?
Se deformi l'oggetto nel vertex shader, ciò accade solo immediatamente prima della visualizzazione / rasterizzazione , quindi questo significa che nessuno degli oggetti di gioco saprà della deformazione . Questo va bene se stai semplicemente facendo uno screen saver, o se le deformazioni sono così piccole che non hanno alcun impatto sulla forma collidibile dell'oggetto.
Quando deformi la geometria nel vertex shader, i vertici originali del modello in realtà non si muovono ( sembrano solo muoversi ).
Deformazione nello shader di vertici
deformata:
deforme
Questo è dal capitolo 6 del tutorial cg , (programma n. 14).
Il codice shader per produrre questa deformazione è qualcosa di simile
// choose a displacement amount
float displacement = scaleFactor * 0.5 * sin(position.y * frequency * time) + 1 ;
// displace it in the direction of the normal
float4 displacementDirection = float4(normal.x, normal.y, normal.z, 0) ;
// move the vertex
float4 newPosition = position + displacement * displacementDirection ;
// transform (as normal)
oPosition = mul(modelViewProj, newPosition) ;
Quindi puoi vedere, questo accade A DESTRA PRIMA della visualizzazione (lo shader di vertice accade sulla GPU) quindi il codice CPU non ha praticamente modo di accedere alla posizione del vertice trasformato (ci sono modi per inviare dati dalla GPU alla CPU (principalmente tramite texture) ma noi non ci andrò).