OpenGl不使用VBO显示三角形

时间:2016-11-28 20:35:43

标签: opengl maya vbo

我试图在OpenGL中显示2个简单的三角形,但它们不会出现,尽管检查了很多网站。我忘记了代码中的任何内容吗?

#define BUFFER_OFFSET(bytes) ((GLubyte*) NULL + (bytes)) 


    // Prepare:
    GLfloat vertices[]={0,0,1,
        0.5,0,-0.5,
        0,0,0,
        0,0,1,
        0,0,0,
        -0.5,0,-0.5};
    GLushort indices[]={0,1,2,3,4,5};

    GLfloat *generatedVertices=new GLfloat[18];
    GLushort *generatedIndices=new GLushort[6];
    GLfloat *colors=new GLfloat[18];

    glGenBuffers( 3, triangleBuffers ); // triangleBuffers = Global GLuint

        for (int p=0;p<6;p++)
        {
            MVector V(vertices[p*3],vertices[p*3+1],vertices[p*3+2]); // Maya type
            generatedVertices[p*3]=V.x;
            generatedVertices[p*3+1]=V.y;
            generatedVertices[p*3+2]=V.z;

            generatedIndices[p]=p;

            colors[p*3]=0.8f;
            colors[p*3+1]=0.6f;
            colors[p*3+2]=0.0f;
        }


   // vertices
    glBindBuffer(GL_ARRAY_BUFFER, data->triangleBuffers[0]);
    glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat)*18, generatedVertices, GL_STATIC_DRAW);

    // indices
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, data->triangleBuffers[1]);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLushort)*6, generatedIndices, GL_STATIC_DRAW);

    // couloirs
    glBindBuffer(GL_ARRAY_BUFFER, data->triangleBuffers[2]);
    glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat)*18*data->totalSize, colors, GL_STATIC_DRAW);
    // Render:
    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_COLOR_ARRAY);

    glBindBuffer(GL_ARRAY_BUFFER, data->triangleBuffers[0]);
    glVertexPointer(3, GL_FLOAT, 0, BUFFER_OFFSET(0));

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, data->triangleBuffers[1]);

    glBindBuffer(GL_ARRAY_BUFFER, data->triangleBuffers[2]);
    glColorPointer(3, GL_FLOAT, 0,  BUFFER_OFFSET(0));

    glDrawElements(GL_TRIANGLES, totalSize*6, GL_UNSIGNED_INT, 0);

    glDisableClientState( GL_VERTEX_ARRAY );
    glDisableClientState( GL_COLOR_ARRAY );

1 个答案:

答案 0 :(得分:0)

问题来自玛雅。在OpenGL-Legacy模式下,网格被正确显示,在OpenGL-Strict模式下,它不是。我会朝这个方向调查。