内訳は次のとおりです。obj ファイルからモデルをロードし、次のようにバッファに格納します。モデルの色を取得するために、別のオフ ファイルをエクスポートし、頂点ごとに色情報を抽出しました。各頂点に 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 を提供できます。これは問題だと思いましたが、よくわからないので、モデルが色付けされていない理由を誰かが知っている場合は、手を投げてください。