Пример использования Vertex Buffer Object в OpenGL

Небольшой фрагмент кода который показывает как использовать VBO в OpenGL.

#define GL_GLEXT_PROTOTYPES

#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>

GLuint vertexes;
GLuint colors;

void createBuffers();
void display();
void deleteBuffers();

int main(int argc, char** argv) {
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
    glutCreateWindow("VBO");
    glutDisplayFunc(display);
 
    glMatrixMode(GL_MODELVIEW);

    createBuffers();
    glutMainLoop();
    deleteBuffers();

    return 0;
}

void createBuffers() {
    static const GLfloat planeVertexes[4][3] = {
        {0.5, 0.5, 0.0},
        {-0.5, 0.5, 0.0},
        {-0.5, -0.5, 0.0}, 
        {0.5, -0.5, 0.0}
    };

    static const GLfloat planeColors[4][3] = {
        {1.0, 0.0, 0.0},
        {0.0, 1.0, 0.0},
        {0.0, 0.0, 1.0},
        {1.0, 1.0, 1.0}
    };

    glGenBuffers(1, &vertexes);
    glGenBuffers(1, &colors);

    /* Vertex data */
    glBindBuffer(GL_ARRAY_BUFFER, vertexes);
    glBufferData(GL_ARRAY_BUFFER, 4*3*sizeof(GLfloat), planeVertexes, GL_STATIC_DRAW);

    /* Color data */
    glBindBuffer(GL_ARRAY_BUFFER, colors);
    glBufferData(GL_ARRAY_BUFFER, 4*3*sizeof(GLfloat), planeColors, GL_STATIC_DRAW);
}

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

    /* Vertex data */
    glBindBuffer(GL_ARRAY_BUFFER, vertexes);
    glVertexPointer(3, GL_FLOAT, 0, NULL);
    glEnableClientState(GL_VERTEX_ARRAY);

    /* Color data */
    glBindBuffer(GL_ARRAY_BUFFER, colors);
    glColorPointer(3, GL_FLOAT, 0, NULL);
    glEnableClientState(GL_COLOR_ARRAY);
   
    glDrawArrays(GL_POLYGON, 0, 4);
    glFlush();
}

void deleteBuffers() {
    glDeleteBuffers(1, &vertexes);
    glDeleteBuffers(1, &colors);
}
Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s