Pregunta

Estoy experimentando con sombreadores con procesamiento 2.0. Como un simple extractor en la comprensión de los sombreadores de puntos un poco mejor, he implementado un sistema mediante el cual en una clase Sprite:

  1. Fije una hoja de sprithesh como un sampler2D uniforme en el sombreador de fragmentos. 2048x 2048 (12 x 12 marcos de 128 píxeles cuadrados)
  2. creo un punto.
  3. Configuré las coordenadas UV en el shader del vértice para el punto.
  4. compenso las coordenadas UV en el sombreador de vértice por un entero que pasa como una variable uniforme para seleccionar 'Frames' en la hoja de spritesheet
  5. Actualizo el entero (usando el módulo a bucle y) incrementando el desplazamiento UV cada 5 cuadros en la aplicación.
  6. Esto significa que puedo hacer secuencias de animación básicas desde el shader de vértice. No tengo idea de si esto es deseable, pero sospecho que se desempeñaría mejor que establecer un nuevo Sampler2D uniforme en el sombreador de fragmentos cada vez que quiero cambiar los marcos.

    Mi pregunta es: ¿cómo puedo usar este sombreador en múltiples instancias? Si quiero que dos de los sprites en la pantalla al mismo tiempo, cada uno con diferentes valores (es decir, tocando diferentes marcos de la animación) ¿Cómo se logra esto sin que cada uno tiene su propio punto de apuntar y, por lo tanto, su propia copia del Sampler2D uniforme en la memoria?

    Espero que puedas ayudar.

¿Fue útil?

Solución

Sí, este enfoque es mucho mejor que establecer nuevas texturas cada cuadro.

para dibujar múltiples sprites Simplemente use el mismo programa y dibuje los objetos uno por uno usando diferentes uniformes:

1: gluseprograma (suprograma);

2: TEXTURA DE PRESENTACIÓN Y UV para el primer objeto

3: ..draw primer objeto

4: ... configurar nueva textura (o mantener la misma textura es que los sprites están ahí) .. configure los UV para el segundo objeto

5: ..draw segundo objeto y así sucesivamente

Editar: El programa no está obligado por los uniformes que le establece, siempre puede cambiar entonces y volver a llamar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top