teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

5

文章を設定

2021/02/12 03:25

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- OpenGL テキストレンダリング文字が正常に描画出来ない理由知りたい。
1
+ OpenGL レンダリングはされるが文字が表示されない原因どうしてもわからない。
body CHANGED
@@ -1,4 +1,4 @@
1
- 提示画像ですがレンダリングがされますが**文字は表示されません**フォントはゴシックです。日本語文字はそもそもレンダリングすらされないので英語の文字を指定するのは正しいです。なぜ文字は表示されないのにレンダリングは出来るのでしょうか?参考サイトのlearn opengl を参考に作り方が原因がどうしてもわかりませんどうしたらいいのでしょうか?
1
+ 提示画像ですがレンダリングがされますが**文字は表示されません**フォントはゴシックです。日本語文字はそもそもレンダリングすらされないので英語の文字を指定するのは正しいです。なぜ文字は表示されないのにレンダリングは出来るのでしょうか?参考サイトのlearn opengl を参考に作り方が原因がどうしてもわかりませんどうしたらいいのでしょうか?コンストラクタで文字情報を設定しているのですが何が理由なのかどうしてもわかりません、
2
2
 
3
3
 
4
4
 

4

文章を修正しました。

2021/02/12 03:25

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,8 @@
1
- 提示画像ですがなぜ文字が表示されないのでしょうか?描画は出来ているみたいですが描画文字であるAAAAAが表示されない原因が知りたいです。
2
- タ部が何かしている見たいなのですがこれ何が悪いのでしょうか?現状アルファベットのみ描画出来るみたいなのですが日本語含め描画出来ません。描画はされているめ初期化が悪いのでしょうか?
1
+ 提示画像ですがレダリングがされますが**文字は表示されません**フォンはゴシックです。日本語文字はそもそもレンダリングすらされなので英語の文字を指定するのは正しいです。なぜ文字表示されないのにレンダリングは出来るのでしょうか?参考サイトのlearn opengl 参考に作り方が原因がどうしてもわかりませんどうしのでしょうか?
3
2
 
3
+
4
+
5
+
4
6
  試したこと「
5
7
  エラーを表示させました。
6
8
  参考サイトを参考にコードを組みました。

3

文章を編集しました。

2021/02/12 02:04

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,11 +1,109 @@
1
1
  提示画像ですがなぜ文字が表示されないのでしょうか?描画は出来ているみたいですが描画文字であるAAAAAが表示されない原因が知りたいです。
2
- コンストラクタ部がで何かしている見たいなのですがこれは何が悪いのでしょうか?
2
+ コンストラクタ部がで何かしている見たいなのですがこれは何が悪いのでしょうか?現状アルファベットのみ描画出来るみたいなのですが日本語を含め描画出来ません。描画はされているため初期化が悪いのでしょうか?
3
3
 
4
+ 試したこと「
5
+ エラーを表示させました。
6
+ 参考サイトを参考にコードを組みました。
7
+
8
+
9
+
10
+ 参考サイト freetype: https://www.freetype.org/freetype2/docs/reference/ft2-error_code_values.html
11
+ 参考サイト learn opengl : https://learnopengl.com/In-Practice/Text-Rendering
12
+
13
+
14
+
15
+
4
16
  ![イメージ説明](47eba3351fbcd3cefdd8bb769cca83bc.jpeg)
5
17
 
18
+ ```hpp
19
+ #ifndef ___TEXT_HPP_
20
+ #define ___TEXT_HPP_
6
21
 
22
+
23
+ //標準ヘッダー
24
+ #include <iostream>
25
+ #include <string>
26
+ #include <map>
27
+
28
+ //自作ヘッダー
29
+ #include "Entry.hpp"
30
+ #include "Shader.hpp"
31
+ #include "Transform_2D.hpp"
32
+
33
+ //OpenGL 関係
34
+ #include "GLEW/include/GL/glew.h"
35
+ #include "gl/GL.h"
36
+ #include "GLFW/include/GLFW/glfw3.h"
37
+
38
+ //数学ライブラリ
39
+ #include "glm/glm.hpp"
40
+ #include "glm/gtx/euler_angles.hpp"
41
+ #include "glm/gtx/quaternion.hpp"
42
+
43
+
44
+ //FreeType 関係
45
+ #include "ft2build.h"
46
+ #include FT_FREETYPE_H
47
+ #include "freetype/fterrors.h" //エラーライブラリ
48
+ #undef FTERRORS_H_
49
+ #define FT_ERRORDEF( e, v, s ) { e, s },
50
+ #define FT_ERROR_START_LIST {
51
+ #define FT_ERROR_END_LIST { 0, NULL } };
52
+
53
+
54
+
55
+ //前方宣言
56
+ class Entry;
57
+ //class Transform_2D;
58
+
59
+ /*###############################################################################################################
60
+ # 文字描画
61
+ #################################################################################################################*/
62
+
63
+ class Text : public Transform_2D
64
+ {
65
+ public:
66
+ Text(Entry* g);
67
+ ~Text();
68
+ //文字レンダリング
69
+ //座標、大きさ、色、文字
70
+ void RenderText(float x, float y, float scale, glm::vec3 color, const char* format, ...);
71
+
72
+ private:
73
+
74
+ //char str[10000];
75
+
76
+ struct Character {
77
+ unsigned int TextureID; // ID handle of the glyph texture
78
+ glm::ivec2 Size; // Size of glyph
79
+ glm::ivec2 Bearing; // Offset from baseLine_2D to left/top of glyph
80
+ unsigned int Advance; // Horizontal offset to advance to next glyph
81
+ };
82
+
83
+ FT_Library ft;
84
+ FT_Face face;
85
+ std::map<GLchar, Character> Characters;
86
+ unsigned int VAO, VBO;
87
+ unsigned int texture = 0;
88
+
89
+
90
+ // Shader* ShaderProgram;
91
+ std::unique_ptr<Shader> ShaderProgram;
92
+
93
+
94
+ Entry* Owner;
95
+
96
+ };
97
+
98
+
99
+ #endif
100
+ ```
101
+
7
102
  ```cpp
103
+ #include "../Header/Text.hpp"
8
104
 
105
+
106
+
9
107
  /*****************************************************************************************************************
10
108
  * 文字 描画クラス
11
109
  ******************************************************************************************************************/
@@ -16,10 +114,10 @@
16
114
  Owner = g;
17
115
 
18
116
  // シェーダープログラム
19
- ShaderProgram = std::make_unique<Shader>(g,"Shader/2D/Text.vert","Shader/2D/Text.frag");
117
+ ShaderProgram = std::make_unique<Shader>(g, "Shader/2D/Text.vert", "Shader/2D/Text.frag");
20
-
21
- FT_Error fe[100]; //エラー配列
22
118
 
119
+ FT_Error fe[100] = { 0 }; //エラー配列
120
+
23
121
  //FreeTypeを初期化
24
122
  fe[0] = FT_Init_FreeType(&ft);
25
123
 
@@ -35,7 +133,17 @@
35
133
  //ピクセルストレージモードを設定する
36
134
  glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
37
135
 
136
+ // エラー表示
137
+ for (int i = 0; i < 100; i++)
138
+ {
139
+ if (fe[i] != 0)
140
+ {
141
+ printf("%d\n",fe[i]);
142
+ }
38
143
 
144
+ }
145
+
146
+
39
147
  //テクスチャを生成する
40
148
  glGenTextures(1, &texture);
41
149
  glBindTexture(GL_TEXTURE_2D, texture);
@@ -100,7 +208,7 @@
100
208
 
101
209
  //
102
210
  glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 4 * sizeof(float), 0);
103
- // glBindBuffer(GL_ARRAY_BUFFER, 0);
211
+ glBindBuffer(GL_ARRAY_BUFFER, 0);
104
212
  }
105
213
 
106
214
 
@@ -161,7 +269,7 @@
161
269
 
162
270
 
163
271
  // ポリゴンをレンダリング
164
- glDrawArrays(GL_TRIANGLES, 0, 6);
272
+ glDrawArrays(GL_TRIANGLES, 0, 6);
165
273
 
166
274
 
167
275
  x += (ch.Advance >> 6) * scale; // 次のグリフにカーソルを進める
@@ -183,4 +291,12 @@
183
291
  glBindVertexArray(0);
184
292
  glDeleteVertexArrays(1, &VAO);
185
293
  }
294
+ ```
295
+
296
+ ```cpp
297
+ void Scene::Draw()
298
+ {
299
+ Text a(Owner);
300
+ a.RenderText(0,0,2.0,glm::vec3(1,0,0),"AAAAAAAAAAAAAAAAA");
301
+ }
186
302
  ```

2

文章を修正

2021/02/12 01:25

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- OpenGL テキストレンダリングで文字が正常に描画出来ない理由が知りたい。
1
+ OpenGL テキストレンダリングで文字が正常に描画出来ない理由が知りたい。
body CHANGED
@@ -1,5 +1,6 @@
1
+ 提示画像ですがなぜ文字が表示されないのでしょうか?描画は出来ているみたいですが描画文字であるAAAAAが表示されない原因が知りたいです。
1
- 提示ードですが提示画像ようなテキスト描画になってまうのですがどうすば正常に描画出来るのでしょか?
2
+ ストラクタ部がで何かている見たいなのですがは何が悪いのでしょか?
2
- "AAAAA"という引数がRenderText()関数の引数になるのですがなぜ描画がおかしくなるのでしょうか?原因がどうしてもわかりません
3
+
3
4
  ![イメージ説明](47eba3351fbcd3cefdd8bb769cca83bc.jpeg)
4
5
 
5
6
 

1

文章を修正

2021/02/12 00:08

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- OpenGL テキストがレンダリング出来ない理由が知りたい。
1
+ OpenGL テキストがレンダリングで文字が正常に描画出来ない理由が知りたい。
body CHANGED
@@ -1,11 +1,10 @@
1
+ 提示コードですが提示画像ようなテキスト描画になってしまうのですがどうすれば正常に描画出来るのでしょか?
1
- 提示コードのRenderText()関数コメント内部コードですがなぜ描画されのでしょうか? よく考えましたがどうしてもわかりませんどうすればいいのでしょうか?
2
+ "AAAAA"という引数がRenderText()関数の引数になるのですがなぜ描画がおかしくのでしょうか?原因がどうしてもわかりません
2
- 参考サト: https://learnopengl.com/In-Practice/Text-Rendering
3
+ ![メージ説明](47eba3351fbcd3cefdd8bb769cca83bc.jpeg)
3
4
 
5
+
4
6
  ```cpp
5
- #include "../Header/Text.hpp"
6
7
 
7
-
8
-
9
8
  /*****************************************************************************************************************
10
9
  * 文字 描画クラス
11
10
  ******************************************************************************************************************/
@@ -16,7 +15,6 @@
16
15
  Owner = g;
17
16
 
18
17
  // シェーダープログラム
19
- // ShaderProgram = new Shader(g, "Shader/2D/Text.vert", "Shader/2D/Text.frag");
20
18
  ShaderProgram = std::make_unique<Shader>(g,"Shader/2D/Text.vert","Shader/2D/Text.frag");
21
19
 
22
20
  FT_Error fe[100]; //エラー配列
@@ -83,11 +81,6 @@
83
81
 
84
82
  }
85
83
 
86
-
87
- //開放
88
- // glBindTexture(GL_TEXTURE_2D, 0);
89
- // glDeleteTextures(1, &texture);
90
-
91
84
  //FreeTypeの終了処理
92
85
  FT_Done_Face(face);
93
86
  FT_Done_FreeType(ft);
@@ -106,8 +99,7 @@
106
99
 
107
100
  //
108
101
  glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 4 * sizeof(float), 0);
109
- glBindBuffer(GL_ARRAY_BUFFER, 0);
102
+ // glBindBuffer(GL_ARRAY_BUFFER, 0);
110
-
111
103
  }
112
104
 
113
105
 
@@ -158,19 +150,20 @@
158
150
  };
159
151
 
160
152
 
161
- //////////////////////////////////////////////////////////////////////////////
153
+
162
154
  //テクスチャを設定
163
155
  glBindTexture(GL_TEXTURE_2D, ch.TextureID);
164
156
  glBindVertexArray(VAO);
165
157
  glBindBuffer(GL_ARRAY_BUFFER, VBO);
166
158
  glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(vertices), vertices); //
167
- /////////////////////////////////////////////////////////////////////////////
159
+
168
160
 
161
+
169
162
  // ポリゴンをレンダリング
170
163
  glDrawArrays(GL_TRIANGLES, 0, 6);
171
164
 
172
165
 
173
- x += (ch.Advance>> 6) * scale; // 次のグリフにカーソルを進める
166
+ x += (ch.Advance >> 6) * scale; // 次のグリフにカーソルを進める
174
167
  }
175
168
 
176
169
 
@@ -184,12 +177,9 @@
184
177
  glDeleteTextures(1, &texture);
185
178
 
186
179
  glBindBuffer(GL_ARRAY_BUFFER, 0);
187
- glDeleteBuffers(1, &VAO);
180
+ glDeleteBuffers(1, &VBO);
188
181
 
189
182
  glBindVertexArray(0);
190
- glDeleteVertexArrays(1, &VAO);
183
+ glDeleteVertexArrays(1, &VAO);
191
-
192
-
193
-
194
184
  }
195
185
  ```