質問編集履歴

1

文章とタイトルを編集しました。

2020/11/17 15:04

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- Shaderクラスを使ってシェーダー関係を管理するが動作しな理由が知りたい。
1
+ 2D表示のポリゴンをデプバッファ有効にた状態では表示されくなる理由が知りたい。
test CHANGED
@@ -1,428 +1,4 @@
1
- 提示コードはシェーダーを管理するクラスですがなぜシェーダーが適切に動作しないのしょうか? このシェーダープログラムは像を表示させるスプライトGLSLですがなぜ表示されないのでしょうか?
1
+ sp->DrawGraph();クラスですがこれは2DのUIのようで画面に表示るスプライトなのですがデプスバッファを有効にした状態では画面に表示されなくなるのでその際は提示コードのようにオフにしてます。cubeクラスは3Dポリゴンで立方体を表示しています。両方とも個別シェーダー描画させています。
2
-
3
- しっかりvoid Active();関数をdraw();関数内に置きその後void SetFloatUniform_3m();で値を設定しているのですがなぜでしょうか?
4
-
5
- printf();デバッグもしました。
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
- ```.hpp
16
-
17
-
18
-
19
- //シェーダー管理クラス
20
-
21
- class Shader
22
-
23
- {
24
-
25
- public:
26
-
27
- Shader();
28
-
29
-
30
-
31
- void LoadShader(const char* VertName, const char* FragName);
32
-
33
-
34
-
35
- //設定変数系
36
-
37
- void SetFloatUniform_4m(const char* str, glm::mat4 m);
38
-
39
- void SetFloatUniform_3m(const char* str, glm::mat3 m);
40
-
41
-
42
-
43
- void SetFloatUniform_1f(const char* name, float m);
44
-
45
- void SetFloatUniform_2f(const char* name, glm::vec2 v);
46
-
47
- void SetFloatUniform_3f(const char* name, glm::vec3 v);
48
-
49
- void SetFloatUniform_4f(const char* name, glm::vec4 v);
50
-
51
-
52
-
53
- //有効にする設定
54
-
55
- void Active();
56
-
57
-
58
-
59
- private:
60
-
61
-
62
-
63
- bool CompileShader(const char* fileName, GLenum type);
64
-
65
- void GetShader_Log(GLuint shader_type, GLuint Log_type);
66
-
67
-
68
-
69
- GLuint ShaderProgram;
70
-
71
- };
72
-
73
-
74
-
75
- #endif
76
-
77
- ```
78
-
79
-
80
-
81
-
82
-
83
-
84
-
85
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
86
-
87
- ```.cpp
88
-
89
- #include "Shader.hpp"
90
-
91
-
92
-
93
- Shader::Shader()
94
-
95
- {
96
-
97
- printf("class Shader\n");
98
-
99
-
100
-
101
- }
102
-
103
-
104
-
105
- //シェーダー関係のログを取得
106
-
107
- void Shader::GetShader_Log(GLuint shader_type, GLuint Log_type)
108
-
109
- {
110
-
111
- GLint bufferSize = 0;
112
-
113
- GLchar* infoLog = nullptr;
114
-
115
-
116
-
117
- //成功したかどうか?
118
-
119
- glGetShaderiv(shader_type, Log_type, &bufferSize);
120
-
121
- if (bufferSize == GL_FALSE)
122
-
123
- {
124
-
125
- //printf("あああああ");
126
-
127
- }
128
-
129
- //ログの長さを取得する
130
-
131
- glGetShaderiv(shader_type, GL_INFO_LOG_LENGTH, &bufferSize);
132
-
133
-
134
-
135
- infoLog = (GLchar*)malloc(bufferSize);
136
-
137
-
138
-
139
- if (infoLog != NULL)
140
-
141
- {
142
-
143
- GLsizei length;//ログの長さ
144
-
145
- glGetShaderInfoLog(shader_type, bufferSize, &length, infoLog);
146
-
147
- //printf("%d\n",length);
148
-
149
- if (length > 1)//null文字を含むため一文字以上の場合ログ出力
150
-
151
- {
152
-
153
- fprintf(stderr, "InfoLog: %s\n\n", infoLog);
154
-
155
- }
156
-
157
-
158
-
159
- free(infoLog);//メモリ開放
160
-
161
- infoLog = NULL;
162
-
163
- }
164
-
165
-
166
-
167
- //return true;
168
-
169
- }
170
-
171
-
172
-
173
- //シェーダー読み込みとコンパイル
174
-
175
- bool Shader::CompileShader(const char* fileName, GLenum type)
176
-
177
- {
178
-
179
-
180
-
181
- GLuint out_shader = glCreateShader(type);
182
-
183
-
184
-
185
- //シェーダーを読み込み
186
-
187
- std::ifstream shaderfile(fileName);
188
-
189
- if (shaderfile.is_open())
190
-
191
- {
192
-
193
- std::stringstream sstream;
194
-
195
- sstream << shaderfile.rdbuf();
196
-
197
- std::string str = sstream.str();
198
-
199
- const char* cc = str.c_str();
200
-
201
-
202
-
203
- glShaderSource(out_shader, 1, &cc, nullptr);
204
-
205
-
206
-
207
- glCompileShader(out_shader);
208
-
209
-
210
-
211
- // printf("ファイル読み込み成功: %s\n", fileName);
212
-
213
- GetShader_Log(out_shader, GL_COMPILE_STATUS);
214
-
215
- glAttachShader(ShaderProgram, out_shader);
216
-
217
- shaderfile.close();
218
-
219
- }
220
-
221
- else {
222
-
223
- shaderfile.close();
224
-
225
- glDeleteShader(out_shader);
226
-
227
-
228
-
229
- printf("ファイル: %s が読み込めませんでした。", fileName);
230
-
231
- return false;
232
-
233
- }
234
-
235
-
236
-
237
- glDeleteShader(out_shader);
238
-
239
-
240
-
241
- return true;
242
-
243
- }
244
-
245
-
246
-
247
- //シェーダー読み込み関数
248
-
249
- void Shader::LoadShader(const char* VertName, const char* FragName)
250
-
251
- {
252
-
253
- ShaderProgram = glCreateProgram();
254
-
255
-
256
-
257
- if (CompileShader(VertName, GL_VERTEX_SHADER) == false)
258
-
259
- {
260
-
261
- printf("頂点シェーダーがファイル名が間違っています: %s\n", VertName);
262
-
263
- }
264
-
265
-
266
-
267
- if (CompileShader(FragName, GL_FRAGMENT_SHADER) == false)
268
-
269
- {
270
-
271
- printf("フラグメントシェーダーがファイル名が間違っています: %s\n", FragName);
272
-
273
- }
274
-
275
-
276
-
277
-
278
-
279
- glLinkProgram(ShaderProgram);
280
-
281
-
282
-
283
-
284
-
285
- // return ShaderProgram;
286
-
287
- }
288
-
289
-
290
-
291
- //アクティブ関数
292
-
293
- void Shader::Active()
294
-
295
- {
296
-
297
- glUseProgram(ShaderProgram);
298
-
299
- }
300
-
301
-
302
-
303
- //行列 3行列
304
-
305
- void Shader::SetFloatUniform_3m(const char* str, glm::mat3 m)
306
-
307
- {
308
-
309
- printf("SetFloatUniform_3m()\n");
310
-
311
-
312
-
313
- float* p = glm::value_ptr(m);
314
-
315
- glUniformMatrix3fv(glGetUniformLocation(ShaderProgram, str), 1, GL_FALSE, p);
316
-
317
- }
318
-
319
-
320
-
321
- //行列 4行列
322
-
323
- void Shader::SetFloatUniform_4m(const char* str, glm::mat4 m)
324
-
325
- {
326
-
327
- printf("SetFloatUniform_4m()\n");
328
-
329
-
330
-
331
- float* p = glm::value_ptr(m);
332
-
333
- glUniformMatrix4fv(glGetUniformLocation(ShaderProgram, str), 1, GL_FALSE, p);
334
-
335
- }
336
-
337
- ```
338
-
339
-
340
-
341
- ```GLSL
342
-
343
- #version 400
344
-
345
-
346
-
347
-
348
-
349
- layout (location = 0) in vec2 vertex_pos; //座標
350
-
351
- layout (location = 1) in vec2 vertex_uv; //UV
352
-
353
-
354
-
355
- uniform mat3 SimpleViewMatrix; //ビュー行列
356
-
357
- uniform mat3 WorldViewMatrix; //ワールド行列
358
-
359
-
360
-
361
-
362
-
363
- out vec2 out_texcoord;
364
-
365
- void main()
366
-
367
- {
368
-
369
- //座標
370
-
371
- vec3 pos = vec3(vertex_pos,1.0);
372
-
373
-
374
-
375
-
376
-
377
-
378
-
379
- gl_Position = vec4(pos * WorldViewMatrix * SimpleViewMatrix , 1.0);
380
-
381
-
382
-
383
-
384
-
385
- out_texcoord = vertex_uv;
386
-
387
- }
388
-
389
-
390
-
391
- ```
392
-
393
-
394
-
395
- ```GLSL
396
-
397
- #version 400
398
-
399
-
400
-
401
- out vec4 color;
402
-
403
-
404
-
405
- //テクスチャ
406
-
407
- in vec2 out_texcoord;
408
-
409
- uniform sampler2D utexture;
410
-
411
-
412
-
413
- void main()
414
-
415
- {
416
-
417
- color = texture(utexture,out_texcoord);
418
-
419
-
420
-
421
- // color = vec4(0.0, 1.0, 0.0 ,1.0);
422
-
423
- }
424
-
425
- ```
426
2
 
427
3
 
428
4
 
@@ -430,68 +6,52 @@
430
6
 
431
7
 
432
8
 
9
+ //描画アップデート
10
+
11
+ void Game::GenerateOutput()
12
+
13
+ {
14
+
15
+
16
+
17
+ //画面クリア関係
18
+
19
+ glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
20
+
21
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
22
+
23
+ glEnable(GL_DEPTH_TEST); //zバッファ
433
24
 
434
25
 
435
26
 
436
-
437
- //描画
438
-
439
- void Sprite::DrawGraph(int x, int y)
440
-
441
- {
442
-
443
- sh_draw->Active();
27
+ cube->Draw();
444
-
445
-
446
-
447
- printf("Sprite \n");
448
28
 
449
29
 
450
30
 
451
31
 
452
32
 
453
-
454
-
455
- int xx = (-SCREEN_WIDTH / 2) + (1000.0f / 2.0f) + x;
33
+ glDisable(GL_DEPTH_TEST); //zバッファ
456
-
457
- int yy = (SCREEN_HEIGHT / 2) - (1000.0f / 2.0f) - y;
458
-
459
-
460
-
461
- setMove(glm::ivec2(xx,yy));
462
34
 
463
35
 
464
36
 
465
- //描画シェーダー
37
+ sp->DrawGraph(0,600);
466
-
467
- //getViewMatrix(); glm::mat3 型
468
-
469
- //getWorldMatrix(); glm::mat3 型
470
-
471
- sh_draw->SetFloatUniform_3m("SimpleViewMatrix",getViewMatrix());
472
-
473
- sh_draw->SetFloatUniform_3m("WorldViewMatrix",getWorldMatrix());
474
38
 
475
39
 
476
40
 
41
+ // rct->DrawGraph(100,100);
42
+
43
+ printf("aaa\n");
477
44
 
478
45
 
479
46
 
47
+ glViewport(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); //ビューポート
480
48
 
49
+ glfwSwapBuffers(Window); //ダブルバッファリング
481
50
 
482
-
483
-
484
-
485
- glBindVertexArray(vao);
486
-
487
- glBindTexture(GL_TEXTURE_2D, TextureID);
488
-
489
- glDrawElements(GL_TRIANGLES, sizeof(index), GL_UNSIGNED_INT, NULL);
51
+ glfwPollEvents(); //イベント処理
490
52
 
491
53
  }
492
54
 
493
55
 
494
56
 
495
-
496
-
497
57
  ```