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?

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 )


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.