0

这是细分:我从 obj 文件加载模型并将其存储到缓冲区中,如下所示:vbo 用于顶点,ibo 用于索引,vao 用于状态,num_indices 是具有总索引数的 int。为了获得模型颜色,我导出了一个单独的关闭文件并提取了每个顶点的颜色信息,并且我有一个数组,每个顶点有 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 ,我认为这是一个问题,但我不太确定,所以如果有人知道为什么我的模型没有被着色,请帮忙。

4

0 回答 0