OpenGL glColorPointer呈现黑色

时间:2013-11-02 14:12:30

标签: visual-c++ opengl vbo vertex-shader

以下是细分:我从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,我认为这是一个问题,但我不太确定,如果有人知道为什么我的模型没有被着色请伸手。

0 个答案:

没有答案