Pergunta

Estou experimentando sombreadores com o processamento 2.0. Como um simples excersise na compreensão pontual ponteiros um pouco melhor, eu implementei um sistema em que em uma classe Sprite:

    .
  1. Eu defini um sprite como um sampler2 uniforme no fragmento shader. 2048X 2048 (12 x 12 quadros de 128 pixels quadrados)
  2. eu crio um ponto.
  3. Eu configurei coordenadas UV no sombreador do vértice para o ponto.
  4. eu compensar as coordenadas UV no sombreador de vértices por um inteiro passou como uma variável uniforme para selecionar 'quadros' no spriteheet
  5. Eu atualizo o inteiro (usando o módulo para loop e) incrementar o deslocamento UV a cada 5 quadros no aplicativo.
  6. Isso significa que posso fazer sequências de animação básicas dentro do sombreador do vértice. Eu não tenho ideia se isso é desejável, mas eu suspeito que isso funcionaria melhor do que definir um novo sampler2 uniforme no fragmento cada vez que eu quero mudar de quadros.

    Minha pergunta é - como posso usar este shader em várias instâncias? Se eu quiser dois dos sprites na tela ao mesmo tempo, cada um com valores diferentes (ou seja, reproduzindo diferentes quadros da animação) Como isso é alcançado sem cada um tendo seu próprio pointshader e, portanto, sua própria cópia do Sampler2d uniforme?

    Espero que você possa ajudar.

Foi útil?

Solução

Sim, esta abordagem é muito melhor, em seguida, definindo novas texturas cada quadro.

Para desenhar vários sprites, basta usar o mesmo programa e desenhar os objetos um por um usando diferentes uniformes:

1: glusprogram (seuprograma);

2: ..et textura e UV para o primeiro objeto

3 :..draw primeiro objeto

4 :.set nova textura (ou manter a mesma textura são os sprites estão lá) .. padrão o UV para o segundo objeto

5 :. ..draw segundo objeto e assim por diante

editar: o programa não está vinculado pelos uniformes que você definiu, você sempre pode alterar e ligar novamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top