2016-12-27 6 views
1

У меня есть проблема: я последовал за учебник, чтобы построить модель .obj с OpenGL здесь: http://www.opengl-tutorial.org/fr/beginners-tutorials/tutorial-7-model-loading/рисовать вектор <glm::vec3> OPENGL C++

У меня есть только одна проблема, в конце концов, у нас есть вектор рисовать.

В учебнике они сказали использовать "glBufferData()"

Тогда я сделал, что

float* _vertices = new float[vertices.size() * 3];<br> for (int i = 0; i < vertices.size(); ++i) 
    {  
    float* _t = glm::value_ptr(vertices[i]); 
    for (int j = 0; j < 3; ++j) 
     _vertices[i + j*(vertices.size() - 1)] = _t[j]; 
} 

(я преобразовал мой вектор ип поплавка *)

Тогда я загрузить его:

mat4 projection; 
mat4 modelview; 

projection = perspective(70.0, (double)800/600, 1.0, 100.0); 
modelview = mat4(1.0); 

GLuint vertexbuffer; 
glGenBuffers(1, &vertexbuffer); 
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer); 

glBufferData(GL_ARRAY_BUFFER, sizeof(_vertices), _vertices, GL_DYNAMIC_DRAW); 

И, наконец, я рисую его в своей основной петле:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

     modelview = lookAt(vec3(3, 1, 3), vec3(0, 0, 0), vec3(0, 1, 0)); 



     glEnableVertexAttribArray(0); 
     glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer); 
     glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); 



     glDrawArrays(GL_TRIANGLES, 0, vertices.size()); 



     glDisableVertexAttribArray(0); 

Но это не работает ... (У меня есть черный экран)

Спасибо авансом за вашу помощь

ответ

1

sizeof(_vertices) не дает вам то, что вы ожидаете. Он возвращает размер float*, который является указателем, а не количеством байтов данных за указателем.

Использование vertices.data() для указателя на первый элемент в std::vector и 3 * vertices.size() * sizeof(float) как число байт, если ваш вектор содержит поплавки (glm::vec3 containes 3 поплавков).

вместе, как:

glBufferData(GL_ARRAY_BUFFER, 3 * vertices.size() * sizeof(float), vertices.data(), GL_DYNAMIC_DRAW); 

Вы также можете заменить 3 * sizeof(float) на sizeof(glm::vec3).

Также проверьте, ожидает ли ваша функция glm::perspective поле зрения в виде градусов или радиан, в настоящее время вы используете 70,0 градуса.

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