para - opengl es 3.1 android download
OpenGL ES 2.0 ¿Programas múltiples o múltiples Shaders o qué? ¿Como funciona? (1)
El problema (TL; DR)
Mi problema, fundamentalmente, es que no sé cómo OpenGL ES 2.0 espera que escriba y use múltiples sombreadores; o si es aconsejable / esperado que una persona lo haga.
La pregunta fundamental aquí es: si tengo una manzana, una roca resplandeciente y una malla borrosa, todas en el mismo mundo 3D, todo esto se dibuja mejor con diferentes programas de sombreado pero usando la misma mvpMatrix, entonces, ¿cómo voy a utilizarlas todas ¿El mismo renderizado de OpenGL de modo que todos usen los sombreadores más apropiados que he escrito?
Qué he hecho
Así que he escrito un programa básico de OpenGL ES 2.0 para mi juego de Android que funciona perfectamente, ya que puede dibujar el contorno de los objetos en la pantalla. Pero no hace nada más; más o menos porque los shaders se ven así:
Vertex Shader
uniform mat4 uMVPMatrix;
attribute vec4 aPosition;
void main() {
gl_Position = uMVPMatrix * aPosition;
}
Fragment Shader
void main() {
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}
Ahora son bastante básicos. La razón por la que no he ido más lejos es porque no puedo averiguar si se supone que debo escribir un sombreador para aplicar a todos mis objetos diferentes o si se supone que debo usar varios sombreadores. Y si se supone que debo usar varios sombreadores para dibujar múltiples objetos diferentes, ¿cómo hago para hacerlo de una manera eficiente?
Tengo la sensación de que este debe ser un conocimiento básico para cualquiera que use OpenGL ES 2.0 día tras día, por lo que espero que alguien pueda responder a mi pregunta o indicarme la dirección correcta.
Yo tengo:
- Mirado en múltiples tutoriales; Ninguno de los cuales utiliza nada más que los sombreadores más básicos.
- Lea la especificación completa de OpenGL ES 2.0 GLSL (ninguna de las cuales mencionó cómo se pretendía utilizar; se trató de lo que hizo todo en lugar de cómo encaja).
- Intenté modificar mis shaders un poco.
Así que espero estar cerca de comprender el flujo de trabajo de OpenGL pero parece que todavía no estoy allí.
Edit: encontré esto bien después:
Si su aplicación está escrita para OpenGL ES 2.0, no cree un solo sombreador con muchos interruptores y condicionales que realicen cada tarea que su aplicación necesita para renderizar la escena. En su lugar, compile múltiples programas de sombreado que realicen cada uno una tarea específica y enfocada.
Eso es de las directrices de iOS OpenGL ES 2.0.
Puede usar múltiples sombreadores, pero cambiar entre ellos puede ser bastante costoso, por lo que la práctica recomendada es dibujar cada objeto de un sombreador, luego cambiar al siguiente sombreador y dibujar todos los objetos utilizando ese y así sucesivamente.
Para cambiar entre los sombreadores, llame a glUseProgram()
.