Para la matemática real de la deformación, esto puede ser muy complicado, ¿por qué no comienzas aquí? .
Ahora hablaré sobre cómo puede aplicar esto, suponiendo que ya tenga las matemáticas de cómo reducirá sus deformaciones.
2 maneras:
1) Cada cuadro, visite cada vértice en el modelo de cilindro y desfasarlo de alguna manera.
2) Desplaza los vértices en el sombreador de vértices mientras estás renderizando. OpenGL ES 2.0 admite sombreadores de vértices. Entonces tienes suerte, de alguna manera.
¿Desea deformar solo el objeto tal como aparece en la pantalla , o desea deformar el objeto para que cada objeto en el juego sepa que se ha deformado?
Si deforma el objeto en el sombreador de vértices, eso sucede solo inmediatamente antes de la visualización / rasterización , por lo que esto significa que ninguno de los objetos del juego sabrá sobre la deformación . Esto está bien si simplemente está haciendo un protector de pantalla, o si las deformaciones son tan pequeñas que no tienen impacto en la forma colisionable del objeto.
Cuando deforma la geometría en el sombreador de vértices, los vértices originales del modelo en realidad no se mueven (solo parecen moverse ).
Deformación en vertex shader
No deformado:
Deformado
Esto es del capítulo 6 del tutorial de CG , (programa # 14).
El código de sombreador para producir esta deformación es algo así como
// 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) ;
Como puede ver, esto sucede JUSTO ANTES de la pantalla (el sombreador de vértices ocurre en la GPU), por lo que el código de la CPU prácticamente no tiene forma de acceder a la posición del vértice transformado (hay formas de enviar datos desde la GPU a la CPU (principalmente a través de texturas) pero No iré allí).