C OpenGL 4.1:顶点数组对象不绘制任何内容

C OpenGL 4.1:顶点数组对象不绘制任何内容,c,opengl,C,Opengl,我试图使用顶点数组对象在OpenGL 4.1中绘制一些顶点和索引: float vertices[] = {-0.8, -0.8, 0, 0.8, -0.8, 0, 0, 0.8, 0}; unsigned int indices[] = { 0, 1, 2 }; 在设置VAO并使用glDrawerElements()绘制它之后,我得到一个空屏幕。我还尝试使用一对简单的着色器,只返回原始顶点位置和硬编码颜色,但也没有成功 以下是设置VBO和VAO的代码: unsigned int vertex

我试图使用顶点数组对象在OpenGL 4.1中绘制一些顶点和索引:

float vertices[] = {-0.8, -0.8, 0, 0.8, -0.8, 0, 0, 0.8, 0};
unsigned int indices[] = { 0, 1, 2 };
在设置VAO并使用glDrawerElements()绘制它之后,我得到一个空屏幕。我还尝试使用一对简单的着色器,只返回原始顶点位置和硬编码颜色,但也没有成功

以下是设置VBO和VAO的代码:

unsigned int vertexArray;
glGenVertexArrays(1, &vertexArray);
glBindVertexArray(vertexArray);

unsigned int vertexBufferID;
unsigned int indexBufferID;

glGenBuffers(1, &vertexBufferID);
glGenBuffers(1, &indexBufferID);

glBindBuffer(GL_ARRAY_BUFFER, vertexBufferID);
glBufferData(GL_ARRAY_BUFFER, 4 * vertexCount, vertices, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 4 * vertexCount, 0);

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBufferID);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, 4 * indexCount, indices, GL_STATIC_DRAW);
我用以下方法绘制VAO:

glBindVertexArray(vertexArray);
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, (void*)0);
以下是所有OpenGL调用的跟踪:

// Setup code

glViewport(0,0,1024,768)
glGetString(GL_RENDERER)="GeForce GT 540M/PCIe/SSE2" 
glGetString(GL_VENDOR)="NVIDIA Corporation" 
glGetString(GL_VERSION)="4.1.0 NVIDIA 359.46" 
glGetString(GL_SHADING_LANGUAGE_VERSION)="4.10 NVIDIA via Cg compil..." 
glEnable(GL_DEPTH_TEST)
glDepthFunc(GL_LESS)
glGenVertexArrays(1,000000000015F9B4)
glBindVertexArray(1)
glGenBuffers(1,000000000015F9D4)
glGenBuffers(1,000000000015F9F4)
glBindBuffer(GL_ARRAY_BUFFER,1)
glBufferData(GL_ARRAY_BUFFER,36,000000000015FA48,GL_STATIC_DRAW)
glEnableVertexAttribArray(0)
glVertexAttribPointer(0,3,GL_FLOAT,false,36,0000000000000000)
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,2)
glBufferData(GL_ELEMENT_ARRAY_BUFFER,12,000000000015FA88,GL_STATIC_DRAW)
glClearColor(0.300000,0.300000,0.400000,1.000000)

// End of setup, here's the code rendering two frames (they just repeat):

glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT)
glBindVertexArray(1)
glDrawElements(GL_TRIANGLES,3,GL_UNSIGNED_INT,0000000000000000)
glGetError()=GL_NO_ERROR 
wglSwapBuffers(0000000069011A82)=true 

glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT)
glBindVertexArray(1)
glDrawElements(GL_TRIANGLES,3,GL_UNSIGNED_INT,0000000000000000)
glGetError()=GL_NO_ERROR 
wglSwapBuffers(0000000069011A82)=true 

据我所知,我正在做几乎所有教程都说我应该做的事情,但由于某种原因,我的屏幕上从来没有出现过任何东西。我遗漏了什么?

您的数据在数组中被紧密压缩,因此
glvertexattributepointer
中的步长参数应该是0。顺便说一句,如果您声明静态数组,您应该使用
sizeof
传递数组的大小,而不是依赖于实现的内容,如
4*vertexCount

glBindBuffer(GL_ARRAY_BUFFER, vertexBufferID);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBufferID);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);

你基本上是对的。跨距为0会导致opengl假定数组是紧密压缩的,并将根据其他参数计算正确的跨距值。以正确的步幅传球并不错误。但是,我将数组的长度作为步长值,这当然不起作用>