質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

0回答

723閲覧

OpenGL 生成したbitmapを一つのbitmapにまとめる方法 文字描画

退会済みユーザー

退会済みユーザー

総合スコア0

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/11/27 05:35

提示コードですがfor分内部で文字一つ一つを矩形のポリゴンを作りそこに文字を一つ一つ載せてると思うのですが処理速度の問題で一つの矩形ポリゴンに全部の文字を載せるには一つののテクスチャにしないといけないのでつまり文字を一つのテクスチャにするにはどうすればいいのでしょうか?

おそらく複数のテクスチャ?ビットマップ?を一つに連結する方法と思われるのですがそれはどうすればいいのでしょうか?

cpp

1 2//文字を表示 3void Text::Rendering(float x, float y, glm::vec4 color, const char* format, ...) 4{ 5 //printf("あああ\n"); 6 ShaderProgram->Enable(); //アクティブにする 7 8 //float xx = (-SCREEN_WIDTH / 2) + x; 9 //float yy = (SCREEN_HEIGHT / 2) - y; 10 11 float xx = x; 12 float yy = y; 13 float scale = 1.0f;//大きさ 14 15 //文字を生成 16 std::string text; //生成した文字を格納 17 va_list ap; 18 char str[1000]; 19 va_start(ap, format); 20 vsprintf_s(str, sizeof(str), format, ap); 21 va_end(ap); 22 text = std::string(str); 23 24 //シェーダー 25 ShaderProgram->SetFloatUniform_3m("uViewMatrix", Transform_2D::getViewMatrix()); // ビュー行列 26 ShaderProgram->SetFloatUniform_3m("uWorldMatrix", Transform_2D::getWorldMatrix()); // ワールド行列 27 ShaderProgram->SetFloatUniform_4f("uTextColor", color); //色を設定 RGB 28 29 glActiveTexture(GL_TEXTURE0); 30 glBindVertexArray(VAO); 31 struct Vtx { 32 float data[6][4]; 33 }; 34 35 std::vector<Vtx> vertices; 36 std::vector<Character> ch; 37 int t = 0; 38 // iterate through all characters 39 std::string::const_iterator itr; 40///////////////////////////////////////////////////////////////////////////////////////////////////// 41 for (itr = text.begin(); itr != text.end(); itr++) 42 { 43 ch.push_back( Characters[*itr]); 44 45 float xpos = xx + ch.back().Bearing.x * scale; 46 float ypos = yy - (ch.back().Size.y - ch.back().Bearing.y) * scale; 47 48 printf("xpos: %.2f\n", xpos); 49 printf("ypos: %.2f\n\n", ypos); 50 // Transform_2D::setTransform(glm::ivec2(t, 0), 0, glm::ivec2(1, 1)); 51 52 float w = ch.back().Size.x * scale; 53 float h = ch.back().Size.y * scale; 54 55 //頂点情報を書き換え 56 float vert[6][4] = { 57 { xpos, ypos + h, 0.0f, 0.0f }, 58 { xpos, ypos, 0.0f, 1.0f }, 59 { xpos + w, ypos, 1.0f, 1.0f }, 60 61 { xpos, ypos + h, 0.0f, 0.0f }, 62 { xpos + w, ypos, 1.0f, 1.0f }, 63 { xpos + w, ypos + h, 1.0f, 0.0f } 64 }; 65 Vtx v; 66 v.data[0][0] = vert[0][0]; 67 v.data[0][1] = vert[0][1]; 68 v.data[0][2] = vert[0][2]; 69 70 v.data[0][3] = vert[0][3]; 71 v.data[1][0] = vert[1][0]; 72 v.data[1][1] = vert[1][1]; 73 74 v.data[1][2] = vert[1][2]; 75 v.data[1][3] = vert[1][3]; 76 v.data[2][0] = vert[2][0]; 77 78 v.data[2][1] = vert[2][1]; 79 v.data[2][2] = vert[2][2]; 80 v.data[2][3] = vert[2][3]; 81 82 v.data[3][0] = vert[3][0]; 83 v.data[3][1] = vert[3][1]; 84 v.data[3][2] = vert[3][2]; 85 v.data[3][3] = vert[3][3]; 86 87 v.data[4][0] = vert[4][0]; 88 v.data[4][1] = vert[4][1]; 89 v.data[4][2] = vert[4][2]; 90 v.data[4][3] = vert[4][3]; 91 92 v.data[5][0] = vert[5][0]; 93 v.data[5][1] = vert[5][1]; 94 v.data[5][2] = vert[5][2]; 95 v.data[5][3] = vert[5][3]; 96 97 vertices.push_back(v); 98 x += (ch.back().Advance >> 6) * scale; 99 } 100////////////////////////////////////////////////////////////////////////////////////////////////// 101 //テクスチャを設定 102 int i = 0; 103// printf("----------\n"); 104 for (std::vector<Character>::const_iterator itr = ch.begin(); itr != ch.end(); itr++) { 105 // printf("%d\n",itr->TextureID); 106 glBindBuffer(GL_ARRAY_BUFFER, VBO); 107 108 glBindTexture(GL_TEXTURE_2D, itr->TextureID); 109 110 glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(vertices.at(i).data) , std::data(vertices.at(i).data)); 111 112 glDrawArrays(GL_TRIANGLES, 0, 6); 113 i++; 114 115 } 116 //printf("----------\n"); 117 glBindVertexArray(0); 118 glBindTexture(GL_TEXTURE_2D, 0); 119 120}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

txty

2020/11/28 03:50 編集

テクスチャに張るって意味だったら、ナンセンスな気がするけど、それが解ならすいません。ビルボードの練習なら良いと思います。それより1行ずつ文字を消したり、数字を変えたりする方法が知りたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問