elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  VAOs en OpenGL
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: VAOs en OpenGL  (Leído 2,247 veces)
4dr14n31t0r

Desconectado Desconectado

Mensajes: 85



Ver Perfil
VAOs en OpenGL
« en: 28 Enero 2017, 19:22 pm »

Por lo que tengo entendido, se supone que si llamas a glBindVertexArray, a partir de ahi cuando llames al metodo glBindBuffer el buffer asociado se guardara en el VAO. De modo que si haces esto:

Código
  1. glBindVertexArray(VAOs[0]);
  2. glBindBuffer(GL_ARRAY_BUFFER, VBOs[0]);
  3. glBufferData(GL_ARRAY_BUFFER,sizeof(vertices),vertices,GL_DYNAMIC_DRAW);
  4. glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,2*sizeof(GLfloat),(void*)0);

Entonces a partir de aqui cada vez que hagas esto:
Código
  1. glBindVertexArray(VAOs[0]);

Automaticamente seria como si estuvieras haciendo esto: (Aunque no lo "haces" porque ya esta hecho, solo restauras el buffer que ya esta "hecho")
Código
  1. glBindBuffer(GL_ARRAY_BUFFER, VBOs[0]);
  2. glBufferData(GL_ARRAY_BUFFER,sizeof(vertices),vertices,GL_DYNAMIC_DRAW);
  3. glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,2*sizeof(GLfloat),(void*)0);

Pero cuando hago varios VAOs y a cada VAO le pongo un VBO, por alguna razon cuando pongo el primer, segundo o tercer VAO y compruebo cual es el VBO actual, se me queda en el ultimo VBO con el que llame al metodo glBindBuffer. ¿Por que? Yo digo algo asi:
Código
  1. glBindVertexArray(VAOs[0]);
  2. glBindBuffer(GL_ARRAY_BUFFER, VBOs[0]);
  3. glBindVertexArray(VAOs[1]);
  4. glBindBuffer(GL_ARRAY_BUFFER, VBOs[1]);
  5. glBindVertexArray(VAOs[2]);
  6. glBindBuffer(GL_ARRAY_BUFFER, VBOs[2]);
  7.  
  8. glBindVertexArray(VAOs[0]);
  9. GLint n;
  10. glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &n);
  11. std::cout << "VBO ACTUAL: " << n << std::endl;//Imprime VBOs[2] pero deberia imprimir VBOs[0]


« Última modificación: 28 Enero 2017, 19:29 pm por 4dr14n31t0r » En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: VAOs en OpenGL
« Respuesta #1 en: 29 Enero 2017, 00:32 am »

No has puesto glVertexAttribPointer tras cada glBindBuffer. glBindBuffer no modifica el VAO.


En línea

4dr14n31t0r

Desconectado Desconectado

Mensajes: 85



Ver Perfil
Re: VAOs en OpenGL
« Respuesta #2 en: 30 Enero 2017, 22:01 pm »

Entonces cuando llamo a glVertexAttribPointer es cuando lo meto dentro del VAO? ok
Pero entonces ¿Como puedo guardar en un VAO varios VBOs? ¿Y como puedo usarlos?
« Última modificación: 30 Enero 2017, 22:14 pm por 4dr14n31t0r » En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: VAOs en OpenGL
« Respuesta #3 en: 31 Enero 2017, 00:12 am »

Mm te dejoe ste link que encontré con un ejemplo: http://www.morethantechnical.com/2013/11/09/vertex-array-objects-with-shaders-on-opengl-2-1-glsl-1-2-wcode/

El primer argumento de glVertexAttribPointer es el índice en el que almacenará el VBO. Luego, en el vertex shader, se asignará los valores del VBO a los attribute en las posiciones que mandaste en el primer argumento. (Todo esto lo ves mejor con el código de la web esa, los 2 primeros bloques de código)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
OpenGL Dev C++
Programación C/C++
Monica_Barcelona 7 5,821 Último mensaje 12 Mayo 2010, 18:38 pm
por [Zero]
opengl
Programación General
mapers 4 3,272 Último mensaje 29 Octubre 2010, 23:50 pm
por bolivianito
OPENGL
Programación C/C++
mapers 0 1,853 Último mensaje 13 Enero 2011, 07:08 am
por mapers
OpenGL
Programación C/C++
cazagavilan 1 2,246 Último mensaje 26 Abril 2012, 16:47 pm
por cazagavilan
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines