OpenGL - VAO, VBO, IBO, glDrawElements not displayed

I'm having problems displaying level data on the screen. I have a shader that uses the cube correctly, but not the level.

Here are the settings for my VBO, VAO and IBO:

void ZoneMesh::buildData() { // Create the VBO for this mesh glGenBuffers(1, &vbo); glBindBuffer(GL_ARRAY_BUFFER, vbo); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); // Create the IBO glGenBuffers(1, &ibo); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo); glBufferData(GL_ELEMENT_ARRAY_BUFFER, numPoly * 3 * sizeof(short), indices, GL_STATIC_DRAW); // Create the VAO glGenVertexArraysAPPLE(1, &vao); glBindVertexArrayAPPLE(vao); // Bind the VBO to the buffer and set up the attributes glBindBuffer(GL_ARRAY_BUFFER, vbo); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), BUFFER_OFFSET(0)); glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), BUFFER_OFFSET(sizeof(float)*3)); glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), BUFFER_OFFSET(sizeof(float)*5)); //Bind the IBO to the VAO glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo); } 

Here is my vertex structure:

 struct Vertex { float x; float y; float z; float u; float v; float normX; float normY; float normZ; }; 

Here are the relevant data elements in the ZoneMesh class:

 Vertex* vertices; short* indices; GLuint vbo; GLuint vao; GLuint ibo; 

Vertex shader:

 #version 120 attribute vec3 position; uniform mat4 camera; void main() { gl_Position = camera * vec4(position, 1.0f); } 

Fragment Shader:

 #version 120 void main(void) { gl_FragColor = vec4(0.0, 0.6, 0.7, 1.0); } 

Rendering:

  shader.Use(); // Testing - render the first 50 meshes for(int i = 0; i < 50; i++) { glUniformMatrix4fv(shader("camera"), 1, GL_FALSE, glm::value_ptr(MVPMatrix)); glEnableVertexAttribArray(shader["position"]); glBindVertexArrayAPPLE(zone.getVAO(i)); glDrawElements(GL_TRIANGLES, 500, GL_UNSIGNED_SHORT, NULL); } shader.UnUse(); 

Using render / shader is not a problem. MVPMatrix is ​​correct. I have cubic rendering correctly above it. The zone is not displayed, though.

+6
source share
2 answers

GL_LINE not a valid primitive for glDrawElements , you want GL_LINES .

Use glGetError() in your code to find these problems!

+3
source

I had the same problem ... Look there: what is the role of glbindvertexarrays ... Following the steps in the steps, all Gen / Bind / Data make it work. Moreover, he resolved the confusion between the various dialects represented by several versions of OpenGL ...

0
source

Source: https://habr.com/ru/post/921362/


All Articles