Folhas de Sprite com objetos de buffer e shaders

9

Qual é a "melhor" maneira de lidar com folhas de sprite com shaders e buffers? No modo imediato, é fácil modificar os cabos de texto de um sprite quando ele é desenhado, mas não sei como fazer isso com o opengl moderno. Devo armazenar todos os cabos de texto em um buffer e alterar o ponteiro para cada sprite, ou existe uma maneira melhor?

uggwar
fonte

Respostas:

11

Você sempre pode repetir o "vértice; texcoord" do buffer longo. E apenas use índices como você disse. É provavelmente mais fácil e meio parecido com o que você sabe.

Se você deseja economizar um pouco de memória. Existe uma solução bastante interessante e é ter um sprite em buffer com unir texcoords e criar matriz de transformação de UVs, enviá-lo ao seu shader e multiplicar texcoords com ele (no vértice shader).

Você não precisa criar matrizes sozinho, se não estiver bem com isso. Você pode simplesmente usar funções GL regulares e então ler matriz com a glGetFloatvfunção. Como isso:

glGetFloatv (GL_MODELVIEW_MATRIX ,&g_TexCoordMat);

Eu criei a imagem para descrevê-la melhor. glTranslate ang glScale pode parecer que eles estão apenas se movendo com a base de espaço UV.

uvs de planilha

Se você não sabe como enviar a matriz para o shader, posso compartilhar um código com você.

Editar: imagem adicionada
(fonte para a planilha que usei: funorb.com )

Notabene
fonte
Uau, obrigada! Resposta perfeita. Eu realmente gosto dessa solução e vou analisá-la assim que voltar do trabalho. :-) Se eu ficar preso, vou incomodá-lo com mais algumas perguntas.
uggwar
Até onde eu sei, isso gerará uma chamada de empate para cada sprite. Existe uma maneira de agrupar esses sprites para uma implementação mais suave?
uggwar
@uggwar Desenho instanciado?
Notabene