Hojas de sprites con objetos de amortiguación y sombreadores

9

¿Cuál es la "mejor" forma de manejar hojas de sprites con sombreadores y tampones? En modo inmediato, es fácil modificar los códigos de texto de un sprite cuando se dibuja, pero no sé cómo hacerlo con opengl moderno. ¿Debo almacenar todos los texcoords en un búfer y cambiar el puntero para cada sprite, o hay una mejor manera?

uggwar
fuente

Respuestas:

11

Siempre puede hacer que se repita el búfer "vértice; texcoord". Y solo usa índices como dijiste. Es probablemente más fácil y similar a lo que sabes.

Si quieres guardar algo de memoria. Hay una solución bastante buena y es tener un sprite en el búfer con unir texcoords y crear una matriz de transformación UV y enviarla a su sombreador y multiplicar texcoords con él (en el sombreador de vértices).

No tiene que crear matrices usted mismo si no está de acuerdo con eso. Puede usar funciones GL normales y luego leer la matriz con la glGetFloatvfunción. Me gusta esto:

glGetFloatv (GL_MODELVIEW_MATRIX ,&g_TexCoordMat);

Creé una imagen para describirla mejor. glTranslate ang glScale puede verse como si solo se estuvieran moviendo con la base del espacio UV.

hoja de sprites uvs

Si no sabe cómo enviar la matriz al sombreador, puedo compartir un código con usted.

Editar: imagen agregada
(fuente de spritesheet que utilicé: funorb.com )

Notabene
fuente
¡Wow gracias! Respuesta perfecta. Realmente me gusta esta solución y la buscaré en cuanto regrese del trabajo. :-) Si me quedo atascado, te molestaré con algunas preguntas más.
uggwar
Esto, por lo que puedo ver, generará una llamada de sorteo para cada sprite. ¿Hay alguna manera de agrupar estos sprites para una implementación más fluida?
uggwar
@uggwar ¿Dibujo instanciado?
Notabene