我无法将我的关卡数据显示在屏幕上。我正在使用我的着色器正确渲染立方体而不是水平。
以下是我的VBO,VAO和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);
}
这是我的顶点结构:
struct Vertex
{
float x;
float y;
float z;
float u;
float v;
float normX;
float normY;
float normZ;
};
以下是ZoneMesh类中的相关数据项:
Vertex* vertices;
short* indices;
GLuint vbo;
GLuint vao;
GLuint ibo;
顶点着色器:
#version 120
attribute vec3 position;
uniform mat4 camera;
void main()
{
gl_Position = camera * vec4(position, 1.0f);
}
片段着色器:
#version 120
void main(void)
{
gl_FragColor = vec4(0.0, 0.6, 0.7, 1.0);
}
渲染:
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();
渲染/着色器使用不是问题。 MVPMatrix是正确的。我在它上方正确渲染了一个立方体。该区域不会渲染。
答案 0 :(得分:3)
GL_LINE
不是glDrawElements
的有效原语,您需要GL_LINES
。
在代码中使用glGetError()
来查找这些问题!
答案 1 :(得分:0)
我遇到了同样的问题......看看那里:what is the role of glbindvertexarrays... 按照步骤,所有Gen / Bind / Data使其工作。此外,它解决了几个版本的OpenGL引入的各种方言之间的混淆......