2013-10-30 69 views
0

工作在我的代码开始我初始化了VBO:的OpenGL渲染VBO不能正常

GLuint VBO; 

然后我的顶点和颜色数组:

GL float vertandcol[]={x1,y1, z1, r1,g1,b1, ...........,x3, y3, z3, r3,g3,b3}; 

现在我创建和绑定VBO和分配的空间:

glGenBuffers(1, &VBO); 
glBindBuffer(GL_ARRAY_BUFFER, VBO); 
glBufferData(GL_ARRAY_BUFFER, sizeof(vertandcol),vertandcol, GL_STATIC_DRAW); 

最后渲染功能:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glBindBuffer(GL_ARRAY_BUFFER, VBO); 
glEnableClientState(GL_VERTEX_ARRAY); 
glEnableClientState(GL_COLOR_ARRAY); 
glVertexPointer(3, GL_FLOAT, 6* sizeof(GLfloat), 0); 
glColorPointer(3, GL_FLOAT, 6* sizeof(GLfloat), (void*)(3 * sizeof(GLfloat))); 
glDrawArrays(GL_TRIANGLES, 0,3); 
glDisableClientState(GL_COLOR_ARRAY); 
glDisableClientState(GL_VERTEX_ARRAY); 
glBindBuffer(GL_ARRAY_BUFFER, 0); 

这应该画一个三角形,但我看不到anythig。 也许glVertexPointer和glColorPointer的参数不正确。 我读过关于VBO上opengl.or的文件,我已经跟着几个教程,就像这样:https://www.youtube.com/watch?v=KIeExgOcmv0

我的代码和YouTube链接的代码是相似的,但第一个不能正常工作。我不明白为什么。你可以帮我吗?

这里是整个代码:

GLuint vbo; 
GLfloat vertandcolor[] = {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 init() 
{ 
glGenBuffers(1, &vbo); 
glBindBuffer(GL_ARRAY_BUFFER, vbo); 
glBufferData(GL_ARRAY_BUFFER, sizeof(vertandcolor),vertandcolor, GL_STATIC_DRAW); 

} 



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


glBindBuffer(GL_ARRAY_BUFFER, vbo); 

glEnableClientState(GL_VERTEX_ARRAY); 
glVertexPointer(3, GL_FLOAT, 6* sizeof(GLfloat), 0); 
glEnableClientState(GL_COLOR_ARRAY); 
glColorPointer(3, GL_FLOAT, 6* sizeof(GLfloat), (void*)(3 * sizeof(GLfloat))); 
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"); 
init(); 
glutDisplayFunc(&display); 
glutReshapeFunc(reshape); 

glutMainLoop(); 

} 
+0

as alw ays,有没有GL错误?代码对我来说看起来很好。 – thokra

+0

编译器(NVCC)不会给我任何错误。当我启动代码时,会出现一小段时间的空白窗口。 –

+0

什么职位?你的投影是否正确?什么GUI框架?你使用双缓冲上下文而不交换? – thokra

回答

3

似乎在这里工作:

screenshot

我加GLEW的VBO支持和洗牌周围的事物一点:

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

GLuint vbo = 0; 
void init() 
{ 
    GLfloat verts[] = 
    { 
     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 
    }; 

    glGenBuffers(1, &vbo); 
    glBindBuffer(GL_ARRAY_BUFFER, vbo); 
    glBufferData(GL_ARRAY_BUFFER, sizeof(verts), verts, GL_STATIC_DRAW); 
} 

void display() 
{ 
    glClearColor(0.5,0.2,0.5,1); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    int w = glutGet(GLUT_WINDOW_WIDTH); 
    int h = glutGet(GLUT_WINDOW_HEIGHT); 
    glViewport(0, 0, w, h); 

    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(0, w, 0, h, -1, 1); 

    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 

    glBindBuffer(GL_ARRAY_BUFFER, vbo); 

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

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

    glDrawArrays(GL_TRIANGLES, 0, 3); 

    glDisableClientState(GL_COLOR_ARRAY); 
    glDisableClientState(GL_VERTEX_ARRAY); 

    glBindBuffer(GL_ARRAY_BUFFER, 0); 

    glutSwapBuffers(); 
} 

int main(int argc, char** argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); 
    glutInitWindowSize(350, 350); 
    glutInitWindowPosition(100, 100); 
    glutCreateWindow("VBO"); 
    glewInit(); 

    init(); 

    glutDisplayFunc(display); 
    glutMainLoop(); 
} 
+0

genpfault你的代码工作正常,谢谢谢谢谢谢 –