Estoy un poco confundido acerca de este punto.OpenGL ES 2.0 múltiples mallas? (solo ejemplos del mundo real)
Todo lo que encontré en libros, blogs, foros e incluso en las especificaciones de OpenGl solo habla de técnicas muy abstractas. Nada sobre ejemplos del mundo real.
Y me estoy volviendo loco con esto: ¿Cómo poner y administrar múltiples objetos (mallas) con OpenGL ES 2.x?
En teoría parece simple. Tienes un Vertex Shader (vsh) y un Fragment Shader (fsh), luego unes los dos a un Programa (glGenProgram, glUseProgram, ...). En cada ciclo de renderizado, ese Programa realizará su VSH por cada Vertex y luego realizará FSH en cada "píxel" de ese objeto 3d y finalmente enviará el resultado final al búfer (obviamente sin hablar del por-vértice, rasterización y otros pasos en la tubería).
bien, parece sencilla ...
Todo esto es despedido por una llamada a la función draw (glDrawArrays o glDrawElements).
Aceptar nuevamente.
Ahora me confunden las cosas. Y si tiene varios objetos para representar?
Hablemos de un ejemplo del mundo real. Imagina que tienes un paisaje con árboles y un personaje. La hierba del paisaje tiene una textura, los árboles tienen textura para el tronco y las hojas (Texture Atlas) y finalmente el personaje tiene otra textura (Texture Atlas) y está animado también.
Después de imaginar esta escena, mi pregunta es simple: ¿Cómo se organiza esto?
Crea un programa separado (con un VSH y FSH) para cada elemento de la escena? Como un programa para el alivio de la hierba y el suelo, un programa para los árboles y un programa para el personaje?
Lo he intentado, pero ... cuando creo varios programas y trato de usar glVertexAttribPointer() las texturas y los colores de los objetos entran en conflicto entre sí. Debido a que la ubicación de los atributos, los índices, del primer Programa se repite en el segundo Programa.
Déjenme explicar, utilicé glGetAttribLocation() en una clase que controla el piso de la escena, por lo que el núcleo OpenGL me devolvió el índice de 0,1 y 2 para los atributos de los vértices. Después, en la clase de árboles creé otro programa, otros sombreadores, y después utilicé nuevamente el glGetAttribLocation() en este momento el retorno del núcleo OpenGL con índices de 0, 1, 2 y 3.
Después en el render ciclo, comencé a configurar el primer programa con glUseProgram() y he hecho cambios a sus atributos de vértices con glVertexAttribPointer() y finalmente una llamada a glDrawElements(). Después de esto, vuelva a llamar glUseProgram() al segundo Programa y use glVertexAttribPointer() nuevamente y finalmente glDrawElements(). Pero en este punto, las cosas entran en conflicto, porque los índices de atributos de vértices del segundo Programa también afectan a los vértices del primer Programa.
Probé muchas cosas, busqué mucho, pregunté mucho ... Estoy agotado. No puedo encontrar lo que está mal.
¡Así que comencé a pensar que estoy haciendo todo mal!
Ahora repito mi pregunta de nuevo: ¿Cómo trabajar con múltiples mallas (con diferentes texturas y comportamiento) en OpenGL ES 2.x? ¿Usando múltiples programas? ¿Cómo?
¿Podría mejorar amablemente su respuesta? Estoy muy feliz de que hayas entendido: D – MatterGoal