2015-11-22 3 views
0

Я попытался создать цилиндр VBO, передав std :: vector в буфер вершин вместо static const GLfloat variableName [] = {some data};. Однако в моем окне ничего не получается.Цилиндр VBO OpenGL: Что я делаю неправильно?

Что случилось с моим кодом?

Мои ВБО: Метод

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); 

}

ответ

0

Проблема размер вы передаете в glBufferData: sizeof(bufferData) такое же, как std::vector<float> и не имеет ничего общего с размером данных векторов.

То, что вы должны сделать, это передать фактический размер данных, хранящихся в векторе следующим образом:

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

Большое вам спасибо за указание на это. Он работает сейчас :) – AnagramOfJoans

Смежные вопросы