我知道,这很令人沮丧。我无法在我的 OpenGL 应用程序中显示任何内容——我看到的只是一个空的视口。
当我第一次开始编写应用程序时,我是手动绘制顶点(使用GL_QUADS
)并且一切正常。然后我决定改用VBO (V ertex B uffer O bjects )。现在没有任何效果。
这是顶点的结构:
struct SimpleVertex
{
GLfloat x, y;
GLbyte r, g, b, a;
};
如您所见,它非常简单 - 顶点和 RGBA 颜色数据的 x 和 y 坐标。这是填充顶点和索引缓冲区的代码:
const SimpleVertex rect_vertices[] = {
{ -0.8, 0.8, 0, 255, 0, 128 },
{ 0.8, 0.8, 0, 255, 0, 128 },
{ 0.8, -0.8, 0, 255, 0, 128 },
{ -0.8, -0.8, 0, 255, 0, 128 }
};
const GLuint rect_indices[] = {
0, 1, 2, 3
};
GLuint vertices;
GLuint indices;
glGenBuffers(1, &vertices);
glBindBuffer(GL_ARRAY_BUFFER, vertices);
glBufferData(GL_ARRAY_BUFFER,
sizeof(rect_vertices),
rect_vertices,
GL_STATIC_DRAW);
glGenBuffers(1, &indices);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indices);
glBufferData(GL_ELEMENT_ARRAY_BUFFER,
sizeof(rect_indices),
rect_indices,
GL_STATIC_DRAW);
最后但同样重要的是,这里是应该绘制矩形的代码:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glBindBuffer(GL_ARRAY_BUFFER, vertices);
glVertexPointer(2, GL_FLOAT, 0, NULL);
glColorPointer(4, GL_BYTE, 0,
(const GLvoid *)(sizeof(GLfloat) * 2));
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indices);
glDrawElements(GL_QUADS, 4, GL_UNSIGNED_INT, NULL);
glDisable(GL_BLEND);
我不知道为什么什么都没有被渲染。顶点和颜色数据与使用glVertex2f()
.