以下是细分:我从obj文件加载模型并存储到缓冲区中,如下所示:vbo表示顶点,ibo表示索引,vao表示状态,num_indices是一个带有总索引号的int。为了获得模型颜色,我导出了一个单独的off文件并提取每个顶点的颜色信息,我有一个数组,每个顶点有4个值,所以数组的大小是vertexno * 4。我的绘图功能看起来像这样。
glUniformMatrix4fv(location_model_matrix,1,false,glm::value_ptr(model_matrix));
glUniformMatrix4fv(location_view_matrix,1,false,glm::value_ptr(view_matrix));
glUniformMatrix4fv(location_projection_matrix,1,false,glm::value_ptr(projection_matrix));
//glUniform4f(location_object_color,1,1,1,1);
glBindVertexArray(mesh_vao);
glEnableClientState( GL_COLOR_ARRAY );
glEnableClientState( GL_VERTEX_ARRAY );
glColorPointer( 4, GL_FLOAT, 0, colors );
glDrawElements(GL_TRIANGLES,mesh_num_indices,GL_UNSIGNED_INT,0);
模特渲染黑色。我还在绘图函数中绘制了一些立方体,我使用glUniform4f(location_object_color,rgba)进行着色,如果我取消注释,则加载的网格将采用与最后绘制的立方体相同的颜色。
在我的构造函数中,我有类似的东西:
glClearColor(0.5,0.5,0.5,1);
glClearDepth(1);
glEnable(GL_DEPTH_TEST);
gl_program_shader = lab::loadShader("shadere\\shader_vertex.glsl", "shadere\\shader_fragment.glsl");
location_model_matrix = glGetUniformLocation(gl_program_shader, "model_matrix");
location_view_matrix = glGetUniformLocation(gl_program_shader, "view_matrix");
location_projection_matrix = glGetUniformLocation(gl_program_shader, "projection_matrix");
location_object_color = glGetUniformLocation(gl_program_shader, "object_color");
如果需要,我可以提供我的shader_vertex和shader_fragment,我认为这是一个问题,但我不太确定,如果有人知道为什么我的模型没有被着色请伸手。