Cylinder VBO OpenGL:我做错了什么?

Cylinder VBO OpenGL: What am I doing wrong?

我试图通过将 std::vector 传递给顶点缓冲区而不是 static const GLfloat variableName[]= { some数据};。但是,我的 window.

中没有绘制任何内容

我的代码有什么问题?

我的 VBO:

glGenBuffers(1, &vertexbuffer2);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer2);
std::vector<float> bufferData = CreateCylinder();
glBufferData(
    GL_ARRAY_BUFFER,
    sizeof(bufferData),
    &bufferData.front(),
    GL_STATIC_DRAW);

CreateCylinder 方法:

std::vector<float> CreateCylinder(){
    std::vector<float> outputArray;
    int i, j, k;
    for (j = 0; j <= 360; j += precision_deg){
        outputArray.push_back(float(cos((pi / 180 * j))));
        outputArray.push_back(1.0);
        outputArray.push_back(float(sin((pi / 180 * j))));
        outputArray.push_back(float(cos((pi / 180 * j))));
        outputArray.push_back(-1.0);
        outputArray.push_back(float(sin((pi / 180 * j))));

    }
    for (i = 1; i >= -1; i -= 2){
        outputArray.push_back(0.0);
        outputArray.push_back(float(i));
        outputArray.push_back(0.0);
        for (k = 0; k <= 360; k += precision_deg){
            outputArray.push_back(i*float(cos((pi / 180 * k))));
            outputArray.push_back(float(i));
            outputArray.push_back(float(sin((pi / 180 * k))));
    }
}
return outputArray;

}

渲染方法:

void RenderScene6(){

    glDisable(GL_DEPTH_TEST);
    Projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.0f);
    View = glm::lookAt(
    glm::vec3(5.63757, 1.7351, -2.19067), 
    glm::vec3(0, 0, 0), 
    glm::vec3(0, 1, 0)  
    );

    Model = glm::mat4(1.0f);

    MVP = Projection * View * Model; 
    glUseProgram(programID_1); 
    glUniformMatrix4fv(MatrixID, 1, GL_FALSE, &MVP[0][0]);
    glEnableVertexAttribArray(0);
    glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer2);
    glVertexAttribPointer(
        0,                  
        3,                  
        GL_FLOAT,           
        GL_FALSE,           
        0,                  
        (void*)0            
        );

glDrawArrays(GL_QUAD_STRIP, 0, 437);
glDrawArrays(GL_TRIANGLE_FAN, 438, 888); //THESE ARE HARDCODED ATM.
glDisableVertexAttribArray(0);

}

问题是您传递给 glBufferData 的大小:sizeof(bufferData)std::vector<float> 相同,与向量数据的大小无关。

你要做的就是传递存储在vector中的数据的实际大小,如下:

glBufferData(
    GL_ARRAY_BUFFER,
    bufferData.size() * sizeof(float),
    &bufferData.front(),
    GL_STATIC_DRAW);