2016-12-27 86 views
1

我有一個問題:我也跟着教程構建用OpenGL這裏的obj模型: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]; 
} 

(I轉換我的矢量未浮子*)

然後我加載:

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::vector3 * 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度。