opengl — объект буфера вершин C ++ не появляется

Я пишу следующий простой код, чтобы узнать, как использовать vbo, но ничего не появляется:

GLuint vbo=0;
GLfloat data[] = {175.0, 25.0, 0.0, 1.0, 0.0, 0.0, 100.0, 325.0, 0.0, 0.0,1.0,0.0,
250.0, 25.0, 0.0, 0.0, 0.0, 1.0};

void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(data),data, GL_STATIC_DRAW);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, 0);
glEnableClientState(GL_COLOR_ARRAY);
glColorPointer(3, GL_FLOAT, 0, (void*)(3*sizeof(float)) );
glDrawArrays(GL_TRIANGLES, 0,3);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glutSwapBuffers();
glFlush();
}
void reshape(int w, int h){
glClearColor(0.5,0.2,0.5,1);
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, (GLsizei) w, 0, (GLsizei) h, -1,1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

}
int main(int argc, char** argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(350, 350);
glutInitWindowPosition(100, 100);
glutCreateWindow("VBO");
glutDisplayFunc(&display);
glutReshapeFunc(reshape);
glutMainLoop();

}

Где ошибки?

2

Решение

Вы проходите шаг 0, что означает, что данные должны быть плотно упакованы (все вершины вместе, все цвета вместе и т. Д.). Но ваш массив данных, похоже, чередуется. Изменить указатель вызовов на:

glVertexPointer(3, GL_FLOAT, 6 * sizeof(GLfloat), 0);

glColorPointer(3, GL_FLOAT, 6 * sizeof(GLfloat), (void*)(3 * sizeof(GLfloat)));

Как примечание, вы определенно не должны генерировать совершенно новый VBO при каждом обращении к display(),

5

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

Других решений пока нет …

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