提示コードのvertices.push_back(vert);//////////////////////////////////////////////////////// ですが実行すると
Error [ 配列は、かっこで囲まれた初期化子では初期化できません ] と表示されるのですがどうすればpush_backされるのでしょうか?
cpp
1void Text::Rendering(float x, float y, glm::vec4 color, const char* format, ...) 2{ 3 4 float scale = 1.0f;//大きさ 5 float xx = (-SCREEN_WIDTH / 2) + x; 6 float yy = (SCREEN_HEIGHT / 2) - y; 7 8 x = xx; 9 y = yy; 10 11 //文字を生成 12 std::string text; //生成した文字を格納 13 va_list ap; 14 char str[1000]; 15 va_start(ap, format); 16 vsprintf_s(str, sizeof(str), format, ap); 17 va_end(ap); 18 text = std::string(str); 19 20 //printf("あああ\n"); 21 22 //シェーダー 23 ShaderProgram->Enable(); //アクティブにする 24 25 ShaderProgram->SetFloatUniform_3m("uViewMatrix", getViewMatrix()); // ビュー行列 26 ShaderProgram->SetFloatUniform_3m("uWorldMatrix", getWorldMatrix()); // ワールド行列 27 28 ShaderProgram->SetFloatUniform_4f("uTextColor", color); //色を設定 RGB 29 30 31 glActiveTexture(GL_TEXTURE0); 32 glBindVertexArray(VAO); 33 34 35 std::vector<float[6][4]> vertices; 36 std::vector<Character> ch; 37 38 // iterate through all characters 39 std::string::const_iterator itr; 40 for (itr = text.begin(); itr != text.end(); itr++) 41 { 42 ch.push_back( (Character)Characters[*itr]); 43 44 float xpos = x + ch.back().Bearing.x * scale; 45 float ypos = y - (ch.back().Size.y - ch.back().Bearing.y) * scale; 46 47 float w = ch.back().Size.x * scale; 48 float h = ch.back().Size.y * scale; 49 50 //頂点情報を書き換え 51 52 float vert[6][4] = { 53 { xpos, ypos + h, 0.0f, 0.0f }, 54 { xpos, ypos, 0.0f, 1.0f }, 55 { xpos + w, ypos, 1.0f, 1.0f }, 56 57 { xpos, ypos + h, 0.0f, 0.0f }, 58 { xpos + w, ypos, 1.0f, 1.0f }, 59 { xpos + w, ypos + h, 1.0f, 0.0f } 60 }; 61 62 vertices.push_back(vert);//////////////////////////////////////////////////////// 63 64 } 65 66 67 //テクスチャを設定 68 int i = 0; 69 for (std::vector<Character>::const_iterator itr = ch.begin(); itr != ch.end(); itr++) { 70 glBindTexture(GL_TEXTURE_2D, itr->TextureID); 71 72 73 glBindBuffer(GL_ARRAY_BUFFER, VBO); 74 glBufferSubData(GL_ARRAY_BUFFER, 0, std::size(vertices.at(i)) * 6 * 4, std::data(vertices)); // be sure to use glBufferSubData and not glBufferData 75 76 // glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(vertices), vertices); // be sure to use glBufferSubData and not glBufferData 77 glBindBuffer(GL_ARRAY_BUFFER, 0); 78 79 // render quad 80 glDrawArrays(GL_TRIANGLES, 0, 6); 81 82 // now advance cursors for next glyph (note that advance is number of 1/64 pixels) 83 x += (itr->Advance >> 6) * scale; // bitshift by 6 to get value in pixels (2^6 = 64 (divide amount of 1/64th pixels by 64 to get amount of pixels)) 84 glBindVertexArray(0); 85 glBindTexture(GL_TEXTURE_2D, 0); 86 87 } 88 // update content of VBO memory 89 90} 91 92
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/11/26 09:22
2020/11/26 09:31
2020/11/26 11:24