VBO: массив не рисуется

я следую это руководство и я пытаюсь нарисовать квад на экране. Я также видел исходный код, он такой же, и он должен работать, но в моем случае на экране ничего не отображается. Я использую OpenGL 2.0 с вершинным шейдером, который просто устанавливает красный цвет таким образом, чтобы квадр был виден на экране.

Перед вызовом glutMainLoop я генерирую объект буфера вершин:

#include <GL/glut.h>
#include <GL/glew.h>

vector<GLfloat> quad;
GLuint buffer;

void init()
{
// This routine gets called before glutMainLoop(), I omitted all the code
// that has to do with shaders, since it's correct.
glewInit();
quad= vector<GLfloat>{-1,-1,0, 1,-1,0, 1,1,0, -1,1,0};
glGenBuffers(1,&buffer);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glBufferData(GL_ARRAY_BUFFER,sizeof(GLfloat)*12,quad.data(),GL_STATIC_DRAW);
}

Это моя процедура рендеринга:

void display()
{
glClearColor(0,0,0,0);
glClear(GL_COLOR_BUFFER_BIT);

glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER,buffer);
glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,0,0);
// I also tried passing quad.data() as last argument, but nothing to do.
glDrawArrays(GL_QUADS,0,12);
glDisableVertexAttribArray(0);

glutSwapBuffers();
}

Проблема в том, что на экран ничего не рисуется, я просто вижу черное окно. Квадрат должен быть красным, потому что я установил красный цвет в вершинном шейдере.

0

Решение

Так что, возможно, проблема в подсчете в glDrawArrays (GL_QUADS, 0, 12); который должен быть glDrawArrays (GL_QUADS, 0, 4);

3

Другие решения

Мне не хватало glEnableClientState, как это:

glEnableClientState(GL_VERTEX_ARRAY);
glDrawArrays(GL_QUADS,0,12);
glDisableClientState(GL_VERTEX_ARRAY);
0

По вопросам рекламы [email protected]