以下の提示コードですがなぜ最後に描画指定したvoid GenerateOutput();したインスタンスのみが画面に表示されるのでしょうか?
か描画でバッファーを指定してテクスチャも設定しているのですができない理由がわかりません最後にテクスチャとバッファーの指定を解除しているのでどうすればいいのかわかりません。Github通りにコードを作って見ましたがどうすればいいのかわかりません。
Github: https://github.com/Minganna/Shadow_Assignment/blob/43109e9d632c70304556390e403728da3202e494/src/Mesh.cpp
例 インスタンスを2つ生成して2つとも描画しようとすると最後に描画されたものしか描画されません。
cpp
1 2// コンストラクタ 3Mesh::Mesh(class Game* g, const char* texture, std::vector<Game::VertexAttribute> &vert, std::vector<unsigned int> &idx) : Transform(g) 4{ 5 6 Mesh::static_MeshNumber++; //インスタンス番号を管理 7 mDebug = new Debug_Log("Mesh_Number_%d.txt",static_MeshNumber); //デバッグログ 8 9 Owner = g; //Game 10 vertex = | //頂点配列 11 index = &idx; //インデックス配列 12 Texture = (char*)texture; //テクスチャ 13 shader = new Shader(g, "Shader/3D/Basic.vert", "Shader/3D/Basic.frag"); //シェーダー 14 15 16 if (Owner == nullptr) 17 { 18 mDebug->Write("Owner変数がnullptrです。\n"); 19 } 20 21 if (vertex == nullptr) 22 { 23 mDebug->Write("頂点配列がnullptrです。\n"); 24 } 25 26 if (index == nullptr) 27 { 28 mDebug->Write("インデックス配列がnullptrです。\n"); 29 } 30 31 if (texture == nullptr) 32 { 33 mDebug->Write("テクスチャが設定されていません。nullptrです。\n"); 34 } 35 36 37 // Trnasformを初期化 38 /* 回転 * 拡大縮小 * 座標 */ 39 Rotate = glm::vec3(0, 0, 0); 40 Scale = glm::vec3(1, 1, 1); 41 Position = glm::vec3(0, 0, 0); 42 Transform::setUpdateTransform(Rotate,Scale,Position); 43 44 //VAO 45 glGenVertexArrays(1, &VAO); 46 glBindVertexArray(VAO); 47 48 //VBO 49 glGenBuffers(1, &VBO); 50 glBindBuffer(GL_ARRAY_BUFFER, VBO); 51 glBufferData(GL_ARRAY_BUFFER, std::size(*vertex) * sizeof(Game::VertexAttribute), std::data(*vertex) ,GL_STATIC_DRAW); 52 53 //頂点座標 54 glEnableVertexAttribArray(0); 55 glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Game::VertexAttribute), NULL); 56 57 //UV座標 58 glEnableVertexAttribArray(1); 59 glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(Game::VertexAttribute), (void*)(sizeof(GLfloat) * 3)); 60 61 //法線 62 glEnableVertexAttribArray(2); 63 glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, sizeof(Game::VertexAttribute), (void*)(sizeof(GLfloat) * 5)); 64 65 //IBO 66 glGenBuffers(1, &IBO); 67 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBO); 68 glBufferData(GL_ELEMENT_ARRAY_BUFFER, std::size(*index) * sizeof(unsigned int),std::data(*index),GL_STATIC_DRAW); 69 70 //テクスチャを設定 71 glGenTextures(1, &TextureID); 72 glBindTexture(GL_TEXTURE_2D, TextureID); 73 74 int width, height, numComponents; 75 unsigned char* data = stbi_load((texture), &width, &height, &numComponents, 4); 76 if (data != NULL) { 77 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); 78 } 79 else { 80 std::cerr << "Unable to load texture: " << texture << std::endl; 81 } 82 83 //ミニマップを設定 84 glGenerateMipmap(GL_TEXTURE_2D); 85 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); 86 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 87 88 //異方性フィルタリングを設定 89 GLfloat largest; 90 glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &largest); 91 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, largest); 92 93 stbi_image_free(data); 94 95 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); 96 glBindVertexArray(0); 97} 98 99 100// 描画 101void Mesh::GenerateOutput() 102{ 103 glBindVertexArray(VAO); 104 glBindTexture(GL_TEXTURE_2D, TextureID); 105 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBO); 106 107 glDrawElements(GL_TRIANGLES, (GLsizei)index->size(), GL_UNSIGNED_INT, 0); 108 109 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); 110 glBindVertexArray(0); 111 112}; 113 114
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。