2011-07-28 20 views
8

No puedo entender cómo usar un objeto de búfer de vértice para mi terreno en opengl es 2.0 para iphone. Son datos estáticos así que estoy esperando un aumento de velocidad usando VBO. En OpenGL regular, uso listas de visualización junto con sombreadores no hay problema. Sin embargo, en OpenGL es 2.0 tengo que enviar los datos de los vértices al sombreador como un atributo y no sé cómo funciona esto con el VBO. ¿Cómo puede el buffer de vértices saber qué atributo tiene para vincular los datos de vértice cuando se llama? ¿Esto es posible incluso en OpenGL es 2.0? Si no, ¿hay otras maneras en que pueda optimizar la representación de mi terreno que es estático?OpenGL ES 2.0 y objetos de búfer de vértice (VBO)

Respuesta

12

Claro, esto es bastante simple en realidad, su atributo tiene una ubicación y datos de vértice se alimenta con glVertexAttribPointer de llanura Vertex Arrays, así:

float *vertices = ...; 
int loc = glGetAttribLocation(program, "position"); 
glVertexAttribPointer(loc, 3, GL_FLOAT, GL_FALSE, 0, vertices); 

Para OISCIV, que es lo mismo, pero tienes para unir el búfer al objetivo GL_ARRAY_BUFFER, y el último parámetro de glVertexAttribPointer ahora es un desplazamiento en el almacenamiento de la memoria intermedia. El valor del puntero en sí es interpretado como un desplazamiento:

glBindBuffer(GL_ARRAY_BUFFER, buffer); 
int loc = glGetAttribLocation(program, "position"); 
glVertexAttribPointer(loc, 3, GL_FLOAT, GL_FALSE, 0, 0); 

En este caso, el desplazamiento es 0, suponiendo que los datos de vértice se carga al comienzo de la memoria intermedia. El desplazamiento es medidas en bytes.

El dibujo se realiza con glDrawArrays/glDrawElements. ¡Espero que esto ayude!

+0

Sí, esto debería hacer lo que necesito. Lo intentaré mañana. ¡Gracias! – Nitrex88

+0

Me ayudaría si pudiera encontrar qué hacer con 'vértices' en el segundo ejemplo. ¿Una idea? –

+1

@Stephane vertices deben cargarse en una VBO usando glBufferData. –

Cuestiones relacionadas