質問編集履歴

7

文章を修正

2021/12/12 11:27

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- シャドウマップをレンダリングされない原因が知りたい。
1
+ シャドウマップをレンダリングがおかしい原因が知りたい。
test CHANGED
@@ -1,9 +1,13 @@
1
- 提示コードですが下記の提示画像のように影が描画されないのですがこれは何が原因なのでしょうか?シェーダーファイルは 参考サイトのコードを写しました。現状はライティングはされのですが影が出ません。
1
+ 提示コードですが下記の提示画像のように影が描画されないのですがこれは何が原因なのでしょうか?シェーダーファイルは 参考サイトのコードを写しました。現状はライティングはされて提示画像下の方に丸い黒い数字のようなものが影だと思うのですがなぜの描画おかしいのでしょうか?
2
2
 
3
3
 
4
4
 
5
5
  ##### 確認したこと
6
6
 
7
+
8
+
9
+ ライトは立方体の真上にあります。
10
+
7
11
  ライト、立方体、を移動できるようにして影がどこに映るかを確認
8
12
 
9
13
  参考サイトを参考にGLSLコードを記述

6

文章を修正

2021/12/12 11:27

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -6,6 +6,12 @@
6
6
 
7
7
  ライト、立方体、を移動できるようにして影がどこに映るかを確認
8
8
 
9
+ 参考サイトを参考にGLSLコードを記述
10
+
11
+ 描画のメインループを確認してデプスマップに描画されているか確認
12
+
13
+
14
+
9
15
 
10
16
 
11
17
 
@@ -16,12 +22,6 @@
16
22
 
17
23
 
18
24
 
19
- ※ FrameWork/source/Camera.cpp , Game/source/Game.cpp , Game/source/Ground.cpp 部です。
20
-
21
- Github: [https://github.com/Shigurechan/TopViewGame](https://github.com/Shigurechan/TopViewGame)
22
-
23
-
24
-
25
25
 
26
26
 
27
27
  #####現状の画像
@@ -495,3 +495,249 @@
495
495
 
496
496
 
497
497
  ```
498
+
499
+
500
+
501
+ ##### .frag
502
+
503
+ ```
504
+
505
+ #version 330 core
506
+
507
+ out vec4 FragColor;
508
+
509
+
510
+
511
+ in VS_OUT {
512
+
513
+ vec3 FragPos;
514
+
515
+ vec3 Normal;
516
+
517
+ vec2 TexCoords;
518
+
519
+ vec4 FragPosLightSpace;
520
+
521
+ } fs_in;
522
+
523
+
524
+
525
+ uniform sampler2D diffuseTexture;
526
+
527
+ uniform sampler2D shadowMap;
528
+
529
+
530
+
531
+ uniform vec3 lightPos;
532
+
533
+ uniform vec3 viewPos;
534
+
535
+
536
+
537
+ float ShadowCalculation(vec4 fragPosLightSpace)
538
+
539
+ {
540
+
541
+ // perform perspective divide
542
+
543
+ vec3 projCoords = fragPosLightSpace.xyz / fragPosLightSpace.w;
544
+
545
+ // transform to [0,1] range
546
+
547
+ projCoords = projCoords * 0.5 + 0.5;
548
+
549
+ // get closest depth value from light's perspective (using [0,1] range fragPosLight as coords)
550
+
551
+ float closestDepth = texture(shadowMap, projCoords.xy).r;
552
+
553
+ // get depth of current fragment from light's perspective
554
+
555
+ float currentDepth = projCoords.z;
556
+
557
+ // calculate bias (based on depth map resolution and slope)
558
+
559
+ vec3 normal = normalize(fs_in.Normal);
560
+
561
+ vec3 lightDir = normalize(lightPos - fs_in.FragPos);
562
+
563
+ float bias = max(0.05 * (1.0 - dot(normal, lightDir)), 0.005);
564
+
565
+ // check whether current frag pos is in shadow
566
+
567
+ // float shadow = currentDepth - bias > closestDepth ? 1.0 : 0.0;
568
+
569
+ // PCF
570
+
571
+ float shadow = 0.0;
572
+
573
+ vec2 texelSize = 1.0 / textureSize(shadowMap, 0);
574
+
575
+ for(int x = -1; x <= 1; ++x)
576
+
577
+ {
578
+
579
+ for(int y = -1; y <= 1; ++y)
580
+
581
+ {
582
+
583
+ float pcfDepth = texture(shadowMap, projCoords.xy + vec2(x, y) * texelSize).r;
584
+
585
+ shadow += currentDepth - bias > pcfDepth ? 1.0 : 0.0;
586
+
587
+ }
588
+
589
+ }
590
+
591
+ shadow /= 9.0;
592
+
593
+
594
+
595
+ // keep the shadow at 0.0 when outside the far_plane region of the light's frustum.
596
+
597
+ if(projCoords.z > 1.0)
598
+
599
+ shadow = 0.0;
600
+
601
+
602
+
603
+ return shadow;
604
+
605
+ }
606
+
607
+
608
+
609
+ void main()
610
+
611
+ {
612
+
613
+ vec3 color = texture(diffuseTexture, fs_in.TexCoords).rgb;
614
+
615
+ vec3 normal = normalize(fs_in.Normal);
616
+
617
+ vec3 lightColor = vec3(0.3);
618
+
619
+ // ambient
620
+
621
+ vec3 ambient = 0.3 * lightColor;
622
+
623
+ // diffuse
624
+
625
+ vec3 lightDir = normalize(lightPos - fs_in.FragPos);
626
+
627
+ float diff = max(dot(lightDir, normal), 0.0);
628
+
629
+ vec3 diffuse = diff * lightColor;
630
+
631
+ // specular
632
+
633
+ vec3 viewDir = normalize(viewPos - fs_in.FragPos);
634
+
635
+ vec3 reflectDir = reflect(-lightDir, normal);
636
+
637
+ float spec = 0.0;
638
+
639
+ vec3 halfwayDir = normalize(lightDir + viewDir);
640
+
641
+ spec = pow(max(dot(normal, halfwayDir), 0.0), 64.0);
642
+
643
+ vec3 specular = spec * lightColor;
644
+
645
+ // calculate shadow
646
+
647
+ float shadow = ShadowCalculation(fs_in.FragPosLightSpace);
648
+
649
+ vec3 lighting = (ambient + (1.0 - shadow) * (diffuse + specular)) * color;
650
+
651
+
652
+
653
+ FragColor = vec4(lighting, 1.0);
654
+
655
+ }
656
+
657
+ ```
658
+
659
+
660
+
661
+ ##### .vert
662
+
663
+ ```
664
+
665
+
666
+
667
+ #version 330 core
668
+
669
+ layout (location = 0) in vec3 vertexPosition;
670
+
671
+ layout (location = 1) in vec2 vertexUV;
672
+
673
+ layout (location = 2) in vec3 vertexNormal;
674
+
675
+
676
+
677
+ out vec2 TexCoords;
678
+
679
+
680
+
681
+ out VS_OUT {
682
+
683
+ vec3 FragPos;
684
+
685
+ vec3 Normal;
686
+
687
+ vec2 TexCoords;
688
+
689
+ vec4 FragPosLightSpace;
690
+
691
+ } vs_out;
692
+
693
+
694
+
695
+
696
+
697
+ uniform mat4 uTranslate;
698
+
699
+ uniform mat4 uRotate;
700
+
701
+ uniform mat4 uScale;
702
+
703
+
704
+
705
+ uniform mat4 uViewProjection;
706
+
707
+ uniform mat4 lightSpaceMatrix;
708
+
709
+
710
+
711
+ void main()
712
+
713
+ {
714
+
715
+ vec4 vertex = vec4(vertexPosition,1.0);
716
+
717
+ mat4 model = uTranslate * uRotate * uScale;
718
+
719
+ gl_Position = (uViewProjection * model) * vertex;
720
+
721
+
722
+
723
+ vs_out.FragPos = vec3(model * vec4(vertexPosition, 1.0));
724
+
725
+ vs_out.Normal = transpose(inverse(mat3(model))) * vertexNormal;
726
+
727
+ vs_out.TexCoords = vertexUV;
728
+
729
+ vs_out.FragPosLightSpace = lightSpaceMatrix * vec4(vs_out.FragPos, 1.0);
730
+
731
+
732
+
733
+
734
+
735
+
736
+
737
+
738
+
739
+
740
+
741
+ }
742
+
743
+ ```

5

文章を修正

2021/12/06 08:33

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- シャドウマップをレンダリングする方法が知りたい。
1
+ シャドウマップをレンダリングされない原因が知りたい。
test CHANGED
File without changes

4

文章を修正

2021/11/12 12:27

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -16,17 +16,21 @@
16
16
 
17
17
 
18
18
 
19
+ ※ FrameWork/source/Camera.cpp , Game/source/Game.cpp , Game/source/Ground.cpp 部です。
20
+
19
21
  Github: [https://github.com/Shigurechan/TopViewGame](https://github.com/Shigurechan/TopViewGame)
20
22
 
21
23
 
22
24
 
23
25
 
24
26
 
27
+ #####現状の画像
28
+
25
- ![イメージ説明](4c7ba947c4aa2fc19024f5d0f7f00140.png)
29
+ ![イメージ説明](3ab46cb9adc8980c3ff1e807c1b32901.png)
30
+
26
-
31
+ #####地面のテクスチャ
32
+
27
-
33
+ ![イメージ説明](7d69955b2795ae09f9f7106b3e23bd60.png)
28
-
29
-
30
34
 
31
35
 
32
36
 

3

文章を修正

2021/11/12 12:22

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- シャドウマップをレンダリングする方法が知りたい。シェーダーの使い方が知りたい。
1
+ シャドウマップをレンダリングする方法が知りたい。
test CHANGED
@@ -1,70 +1,28 @@
1
- 提示コードのコメント部とGrond.cppのvoid Renderer(),void RendererDepth()関数部ですがシャドウマップを用いたレンダリングができません。
2
-
3
- 画面に何も表示されません。提示サイトを参考に行っているのですがシェーダーの使い方がわかりません。
4
-
5
-
6
-
7
- 二つのシェーダーが必要でそれを切り替えるのでしょうか?それともどっちをどっちのオブジェクトに割当たらいいのか知りたいです。
8
-
9
- 立方体と地面あるのですが下記(参考サイトのシェーダーコード)の三つのシェーダーのどれどっちに適用したらいいのでしょうか?一つデバッ用と思われるのですが
1
+ 提示コードです下記提示画像のように影が描画されないのですがこれは何が原因なのでしょうか?シェーダーファイルは 参考サイトのコードをまし。現状ライティンはされるのですが影が出ません。
10
-
11
-
12
-
13
- ```
2
+
14
-
15
- Shader shader("3.1.3.shadow_mapping.vs", "3.1.3.shadow_mapping.fs");
3
+
16
-
17
- Shader simpleDepthShader("3.1.3.shadow_mapping_depth.vs", "3.1.3.shadow_mapping_depth.fs");
4
+
18
-
19
- Shader debugDepthQuad("3.1.3.debug_quad.vs", "3.1.3.debug_quad_depth.fs");
20
-
21
- ```
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
- ##### 試したこと 確認したこと
5
+ ##### 確認したこと
34
-
35
- ライトの位置は (0,100,-5)でカメラの位置は斜め下を向いています。単色描画で位置を確認済
6
+
36
-
37
- ライトの方向は(0,-1,0)です。
38
-
39
- モデルの位置は(0,0,-5)です。
40
-
41
- カメラの位置は(0,0,5)です。
42
-
43
- カメラの向きは斜め下を向いていてプレーンモデルを上から眺めています。トップビューのゲーム風
44
-
45
- モデルはプレーンでカメラに映っていることを単色描画で確認しました。
46
-
47
- また単色のシェーダーでは描画できたため、行列計算等の描画はできています。
48
-
49
- シェーダーは参考サイトを参考作成ました。取り得ずコピペです。
7
+ イト、立方体、移動できるようにして影がどこに映るかを確認
50
-
51
- カスタムフレームバッファを使っていて深度バッファがあります。
8
+
52
-
53
-
54
-
9
+
10
+
11
+
12
+
13
+
14
+
55
- FrameWork/source/Camera.cpp ,Game/source/Ground.cpp 部です。
15
+ 参考サイト[https://learnopengl.com/Advanced-Lighting/Shadows/Shadow-Mapping](https://learnopengl.com/Advanced-Lighting/Shadows/Shadow-Mapping)
16
+
17
+
56
18
 
57
19
  Github: [https://github.com/Shigurechan/TopViewGame](https://github.com/Shigurechan/TopViewGame)
58
20
 
59
21
 
60
22
 
61
- 参考サイト: [https://learnopengl.com/code_viewer_gh.php?code=src/5.advanced_lighting/3.1.3.shadow_mapping/shadow_mapping.cpp
23
+
62
-
24
+
63
- ](https://learnopengl.com/code_viewer_gh.php?code=src/5.advanced_lighting/3.1.3.shadow_mapping/shadow_mapping.cpp)
25
+ ![イメージ説明](4c7ba947c4aa2fc19024f5d0f7f00140.png)
64
-
65
-
66
-
67
-
68
26
 
69
27
 
70
28
 
@@ -78,99 +36,253 @@
78
36
 
79
37
  ```
80
38
 
81
- #include "../header/Ground.hpp"
39
+
82
-
83
-
84
-
85
-
86
-
40
+
87
- Ground::Ground() : Actor()
41
+ void Ground::Renderer(glm::mat4 view)const
88
-
42
+
89
- {
43
+ {
90
-
91
- FrameWork::D3::LoadObj("Game/model/ground.obj",file);
92
-
93
- model = std::make_shared<FrameWork::D3::Object>(&file,GL_STATIC_DRAW);
94
-
95
- shader.Load("FrameWork/shader/3D//ShadowMap/ShadowMap.vert","FrameWork/shader/3D/ShadowMap/ShadowMap.frag");
96
-
97
- shaderDepth.Load("FrameWork/shader/3D//ShadowMap/ShadowTexture.vert","FrameWork/shader/3D/ShadowMap/ShadowTexture.frag");
98
44
 
99
45
 
100
46
 
101
-
102
-
103
- shader.setAttributeSize(sizeof(FrameWork::D3::VertexAttribute));
104
-
105
- shader.setAttribute("vertexPosition",3);
106
-
107
- shader.setAttribute("vertexUV",2);
108
-
109
- shader.setAttribute("vertexNormal",3);
110
-
111
-
112
-
113
- shaderDepth.setAttributeSize(sizeof(FrameWork::D3::VertexAttribute));
114
-
115
- shaderDepth.setAttribute("vertexPosition",3);
116
-
117
- shaderDepth.setAttribute(NULL,2);
118
-
119
- shaderDepth.setAttribute(NULL,3);
120
-
121
-
122
-
123
- //texture->push_back(FrameWork::LoadTexture("Game/Assets/debug.png"));
124
-
125
- t = FrameWork::LoadTexture("Game/Assets/debug.png");
126
-
127
- // model->setTexture(t);
47
+ //model->shader = shaderDepth;
128
-
48
+
49
+
50
+
51
+
52
+
53
+
54
+
129
- }
55
+ }
130
-
131
-
132
-
133
-
134
-
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+
135
- void Ground::Update()
65
+ void Ground::RendererDepth(glm::mat4 view)const
66
+
67
+ {
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+ }
76
+
77
+
78
+
79
+
80
+
81
+ void Ground::RendererShadow(GLuint depth,glm::mat4 view)const
136
82
 
137
83
  {
138
84
 
139
85
  model->shader.setEnable();
140
86
 
141
-
142
-
143
-
144
-
145
- /*
87
+ model->setBindBuffer();
88
+
89
+
90
+
146
-
91
+ model->shader.setUniformMatrix4fv("lightSpaceMatrix",lightSpaceMatrix);
92
+
147
-
93
+ model->shader.setUniform3f("viewPos",viewPos);
94
+
95
+ model->shader.setUniform3f("lightPos",lightPos);
96
+
97
+ model->shader.setUniformMatrix4fv("uViewProjection", view);
98
+
99
+
100
+
101
+ glActiveTexture(GL_TEXTURE0);
102
+
103
+ glBindTexture(GL_TEXTURE_2D, texture);
104
+
105
+
148
106
 
149
107
  glActiveTexture(GL_TEXTURE1);
150
108
 
151
- glBindTexture(GL_TEXTURE_2D, depthMap);
109
+ glBindTexture(GL_TEXTURE_2D, depth);
110
+
111
+
112
+
113
+
114
+
152
-
115
+ model->setScale(glm::vec3(100,1,100));
116
+
117
+ model->setRotate(glm::vec3(1,1,1),0);
118
+
119
+
120
+
121
+
122
+
123
+
124
+
125
+
126
+
127
+
128
+
129
+
130
+
153
- */
131
+ model->Renderer(view);
132
+
133
+
154
134
 
155
135
  model->shader.setDisable();
156
136
 
157
-
137
+ model->setUnBindBuffer();
158
-
138
+
159
- }
139
+ }
140
+
141
+
142
+
160
-
143
+ ```
144
+
145
+
146
+
161
-
147
+ ##### cube.cpp
148
+
162
-
149
+ ```
150
+
151
+
152
+
163
- void Ground::Renderer(glm::mat4 view)const
153
+ void Cube::RendererDepth(glm::mat4 view)const
164
-
154
+
165
- {
155
+ {
166
-
156
+
167
- model->shader = shaderDepth;
157
+ model->shader = shader;
158
+
168
-
159
+ model->shader.setEnable();
169
-
170
160
 
171
161
  model->setBindBuffer();
172
162
 
163
+
164
+
165
+
166
+
167
+ // render scene from light's point of view
168
+
169
+
170
+
171
+
172
+
173
+ model->setPosition(position);
174
+
175
+ model->setScale(glm::vec3(5,5,5));
176
+
177
+ model->setRotate(glm::vec3(1,0,0),0);
178
+
179
+
180
+
181
+
182
+
183
+
184
+
185
+
186
+
187
+
188
+
189
+ model->shader.setUniformMatrix4fv("lightSpaceMatrix",lightSpaceMatrix);
190
+
191
+
192
+
193
+
194
+
195
+
196
+
197
+
198
+
199
+
200
+
201
+
202
+
203
+ //model->Renderer(view);
204
+
205
+
206
+
207
+
208
+
209
+
210
+
211
+ model->shader.setDisable();
212
+
213
+ model->setUnBindBuffer();
214
+
215
+
216
+
217
+
218
+
219
+ }
220
+
221
+
222
+
223
+
224
+
225
+
226
+
227
+
228
+
229
+ void Cube::Renderer(glm::mat4 view)const
230
+
231
+ {
232
+
233
+ model->shader = debugShader;
234
+
173
- model->shader.setEnable();
235
+ model->shader.setEnable();
236
+
237
+ model->setBindBuffer();
238
+
239
+
240
+
241
+
242
+
243
+ model->shader.setUniform4f("uFragment",FrameWork::GetGlColor(glm::vec4(0,255,0,255)));
244
+
245
+ model->shader.setUniformMatrix4fv("uViewProjection",view);
246
+
247
+
248
+
249
+
250
+
251
+ model->Renderer(view);
252
+
253
+ model->shader.setDisable();
254
+
255
+ model->setUnBindBuffer();
256
+
257
+ }
258
+
259
+
260
+
261
+ ```
262
+
263
+
264
+
265
+
266
+
267
+ ##### Game.cpp
268
+
269
+ ```
270
+
271
+
272
+
273
+ void Game::Update()
274
+
275
+ {
276
+
277
+ lightCube->Update();
278
+
279
+ ground->Update();
280
+
281
+ cube->Update();
282
+
283
+ control->Update();
284
+
285
+
174
286
 
175
287
 
176
288
 
@@ -178,181 +290,49 @@
178
290
 
179
291
  glm::mat4 lightSpaceMatrix;
180
292
 
181
- float near_plane = 0.1f, far_plane = 700.5f;
293
+ float near_plane = 0.00001f, far_plane = 1000.5f;
182
294
 
183
295
  //lightProjection = glm::perspective(glm::radians(45.0f), (GLfloat)SHADOW_WIDTH / (GLfloat)SHADOW_HEIGHT, near_plane, far_plane); // note that if you use a perspective projection matrix you'll have to change the light position as the current light position isn't enough to reflect the whole scene
184
296
 
185
297
  lightProjection = glm::ortho(-10.0f, 10.0f, -10.0f, 10.0f, near_plane, far_plane);
186
298
 
187
- lightView = glm::lookAt(glm::vec3(0,-1,0), glm::vec3(0,100,-5), glm::vec3(0.0, 1.0, 0.0));
299
+ lightView = glm::lookAt(control->lightCubePosition,glm::vec3(0,-1,0), glm::vec3(0.0, 1.0, 0.0));
188
300
 
189
301
  lightSpaceMatrix = lightProjection * lightView;
190
302
 
191
- // render scene from light's point of view
192
-
193
-
194
-
195
- model->shader.setUniformMatrix4fv("lightSpaceMatrix",lightSpaceMatrix);
196
-
197
-
198
-
199
- model->setPosition(glm::vec3(0,0,-5));
200
-
201
- model->setScale(glm::vec3(100,1,100));
202
-
203
- model->setRotate(glm::vec3(1,0,0),0);
204
-
205
-
206
-
207
-
208
-
209
-
210
-
211
-
212
-
213
-
214
-
215
-
216
-
217
- model->Renderer(view);
218
-
219
- model->shader.setDisable();
220
-
221
- model->setUnBindBuffer();
222
-
223
-
224
-
225
- }
226
-
227
-
228
-
229
-
230
-
231
- void Ground::RendererDepth(GLuint depth,glm::mat4 view)const
232
-
233
- {
234
-
235
- model->shader = shader;
236
-
237
- model->setBindBuffer();
238
-
239
- model->shader.setEnable();
240
-
241
-
242
-
243
-
244
-
245
-
246
-
247
-
248
-
249
-
250
-
251
-
252
-
253
- glm::mat4 lightProjection, lightView;
254
-
255
- glm::mat4 lightSpaceMatrix;
256
-
257
- float near_plane = 0.1f, far_plane = 700.5f;
258
-
259
- //lightProjection = glm::perspective(glm::radians(45.0f), (GLfloat)SHADOW_WIDTH / (GLfloat)SHADOW_HEIGHT, near_plane, far_plane); // note that if you use a perspective projection matrix you'll have to change the light position as the current light position isn't enough to reflect the whole scene
260
-
261
- lightProjection = glm::ortho(-10.0f, 10.0f, -10.0f, 10.0f, near_plane, far_plane);
262
-
263
- lightView = glm::lookAt(glm::vec3(0,-1,0), glm::vec3(0,100,-5), glm::vec3(0.0, 1.0, 0.0));
264
-
265
- lightSpaceMatrix = lightProjection * lightView;
266
-
267
- // render scene from light's point of view
268
-
269
-
270
-
271
- model->shader.setUniform1i("diffuseTexture",0);
272
-
273
- model->shader.setUniform1i("shadowMap",1);
274
-
275
-
276
-
277
- model->shader.setUniformMatrix4fv("lightSpaceMatrix",lightSpaceMatrix);
278
-
279
- model->shader.setUniform3f("viewPos", glm::vec3(0,0,-1));
280
-
281
- model->shader.setUniform3f("lightPos", glm::vec3(0,100,-5));
282
-
283
- model->setPosition(glm::vec3(0,0,-5));
284
-
285
- model->setScale(glm::vec3(100,1,100));
286
-
287
- model->setRotate(glm::vec3(1,0,0),0);
288
-
289
-
290
-
291
-
292
-
293
-
294
-
295
- glActiveTexture(GL_TEXTURE0);
296
-
297
- glBindTexture(GL_TEXTURE_2D, t);
298
-
299
-
300
-
301
- glActiveTexture(GL_TEXTURE1);
302
-
303
- glBindTexture(GL_TEXTURE_2D, depth);
304
-
305
-
306
-
307
- model->shader.setUniformMatrix4fv("uViewProjection", view);
308
-
309
-
310
-
311
- model->Renderer(view);
312
-
313
-
314
-
315
-
316
-
317
-
318
-
319
-
320
-
321
- glBindTexture(GL_TEXTURE_2D,0);
322
-
323
-
324
-
325
- model->shader.setDisable();
326
-
327
- model->setUnBindBuffer();
328
-
329
-
330
-
331
- }
332
-
333
-
334
-
335
-
336
-
337
- Ground::~Ground()
338
-
339
- {
340
-
341
-
342
-
343
- }
344
-
345
-
346
-
347
- ```
348
-
349
-
350
-
351
-
352
-
353
-
354
-
355
-
303
+
304
+
305
+
306
+
307
+
308
+
309
+ cube->lightSpaceMatrix = lightSpaceMatrix;
310
+
311
+ cube->position = control->cubePosition;
312
+
313
+
314
+
315
+ ground->viewPos = camera->getPosition();
316
+
317
+ ground->lightPos = control->lightCubePosition;
318
+
319
+ ground->lightSpaceMatrix = lightSpaceMatrix;
320
+
321
+
322
+
323
+
324
+
325
+ camera->setPosition(control->cameraPosition);
326
+
327
+ camera->setLook(glm::vec3(cos(control->cameraLookAt.x) * cos(control->cameraLookAt.y), sin(control->cameraLookAt.y), sin(control->cameraLookAt.x) * cos(control->cameraLookAt.y)));
328
+
329
+
330
+
331
+
332
+
333
+ }
334
+
335
+ ```
356
336
 
357
337
  ##### Camera.cpp
358
338
 
@@ -372,18 +352,20 @@
372
352
 
373
353
 
374
354
 
355
+ glEnable(GL_TEXTURE_2D); //テクスチャを有効
356
+
357
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); //ブレンドタイプ
358
+
375
359
  glEnable(GL_BLEND); //ブレンド有効
376
360
 
377
- glEnable(GL_TEXTURE_2D); //テクスチャを有効
378
-
379
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); //ブレンドタイプ
380
-
381
361
  glEnable(GL_SAMPLE_ALPHA_TO_COVERAGE); //半透明
382
362
 
383
363
  glEnable(GL_DEPTH_TEST); //深度バッファを有効
384
364
 
385
365
  glDepthFunc(GL_LEQUAL); //深度バッファタイプ
386
366
 
367
+
368
+
387
369
  glEnable(GL_CULL_FACE); //カリングを有効
388
370
 
389
371
  glCullFace(GL_BACK); //裏面を無効
@@ -400,23 +382,29 @@
400
382
 
401
383
  //シャドウオブジェクト
402
384
 
403
- for(std::vector<std::shared_ptr<Actor>>::iterator itr = shadowActor.begin(); itr != shadowActor.end(); itr++)
385
+ for(std::vector<std::shared_ptr<Actor>>::iterator itr = actor.begin(); itr != actor.end(); itr++)
404
386
 
405
387
  {
406
388
 
407
- (*itr)->RendererDepth(depthMap,getViewProjection());
389
+ (*itr)->RendererDepth(getViewProjection());
408
390
 
409
391
  }
410
392
 
411
393
 
412
394
 
413
-
395
+ glBindFramebuffer(GL_FRAMEBUFFER, 0);
396
+
397
+
398
+
414
-
399
+ glViewport(0, 0, FrameWork::windowContext->getSize().x, FrameWork::windowContext->getSize().y);
400
+
415
-
401
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
416
-
402
+
403
+
404
+
417
- //シャドウオブジェクト
405
+ //オブジェクト
418
-
406
+
419
- for(std::vector<std::shared_ptr<Actor>>::const_iterator itr = shadowActor.begin(); itr != shadowActor.end(); itr++)
407
+ for(std::vector<std::shared_ptr<Actor>>::iterator itr = actor.begin(); itr != actor.end(); itr++)
420
408
 
421
409
  {
422
410
 
@@ -426,38 +414,22 @@
426
414
 
427
415
 
428
416
 
429
-
430
-
431
-
432
-
433
- glBindFramebuffer(GL_FRAMEBUFFER, 0);
417
+
434
-
435
-
436
-
437
- glViewport(0, 0, FrameWork::windowContext->getSize().x, FrameWork::windowContext->getSize().y);
418
+
438
-
439
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
440
-
441
-
442
-
443
-
444
-
445
-
446
-
447
-
448
-
449
- //オブジェクト
419
+ //シャドウオブジェクト
450
420
 
451
421
  for(std::vector<std::shared_ptr<Actor>>::iterator itr = actor.begin(); itr != actor.end(); itr++)
452
422
 
453
423
  {
454
424
 
455
- (*itr)->Renderer(getViewProjection());
425
+ (*itr)->RendererShadow(depthMap,getViewProjection());
456
426
 
457
427
  }
458
428
 
459
429
 
460
430
 
431
+
432
+
461
433
  glBindFramebuffer(GL_READ_FRAMEBUFFER, framebuffer);
462
434
 
463
435
  glBindFramebuffer(GL_DRAW_FRAMEBUFFER, intermediateFBO);
@@ -500,7 +472,7 @@
500
472
 
501
473
  glBindTexture(GL_TEXTURE_2D,0);
502
474
 
503
- glBindFramebuffer(GL_FRAMEBUFFER, 0);
475
+ //glBindFramebuffer(GL_FRAMEBUFFER, 0);
504
476
 
505
477
 
506
478
 
@@ -516,4 +488,6 @@
516
488
 
517
489
 
518
490
 
491
+
492
+
519
- ```
493
+ ```

2

文章を修正

2021/11/12 12:18

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- シャドウマップが描画されな原因が知りたい。
1
+ シャドウマップをレンダリングする方法知りた。シェーダーの使い方が知りたい。
test CHANGED
@@ -1,6 +1,28 @@
1
1
  提示コードのコメント部とGrond.cppのvoid Renderer(),void RendererDepth()関数部ですがシャドウマップを用いたレンダリングができません。
2
2
 
3
- 画面に何も表示されません。何が原因なのでしょうか? 参考サイトを参考にレンダリングループ、シェーダーの順序など確認しましたどうしても原因がわかりません。
3
+ 画面に何も表示されません。提示サイトを参考に行っているのですがシェーダーの使い方がわかりません。
4
+
5
+
6
+
7
+ 二つのシェーダーが必要でそれを切り替えるのでしょうか?それともどっちをどっちのオブジェクトに割当たらいいのか知りたいです。
8
+
9
+ 立方体と地面があるのですが下記(参考サイトのシェーダーコード)の三つのシェーダーのどれをどっちに適用したらいいのでしょうか?一つはデバッグ用と思われるのですが
10
+
11
+
12
+
13
+ ```
14
+
15
+ Shader shader("3.1.3.shadow_mapping.vs", "3.1.3.shadow_mapping.fs");
16
+
17
+ Shader simpleDepthShader("3.1.3.shadow_mapping_depth.vs", "3.1.3.shadow_mapping_depth.fs");
18
+
19
+ Shader debugDepthQuad("3.1.3.debug_quad.vs", "3.1.3.debug_quad_depth.fs");
20
+
21
+ ```
22
+
23
+
24
+
25
+
4
26
 
5
27
 
6
28
 
@@ -368,97 +390,89 @@
368
390
 
369
391
 
370
392
 
371
- //フレームバッファをバインド
372
-
373
- glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
393
+ glViewport(0, 0, SHADOW_WIDTH, SHADOW_HEIGHT);
394
+
395
+ glBindFramebuffer(GL_FRAMEBUFFER, depthMapFBO);
396
+
397
+ glClear(GL_DEPTH_BUFFER_BIT);
398
+
399
+
400
+
401
+ //シャドウオブジェクト
402
+
403
+ for(std::vector<std::shared_ptr<Actor>>::iterator itr = shadowActor.begin(); itr != shadowActor.end(); itr++)
404
+
405
+ {
406
+
407
+ (*itr)->RendererDepth(depthMap,getViewProjection());
408
+
409
+ }
410
+
411
+
412
+
413
+
414
+
415
+
416
+
417
+ //シャドウオブジェクト
418
+
419
+ for(std::vector<std::shared_ptr<Actor>>::const_iterator itr = shadowActor.begin(); itr != shadowActor.end(); itr++)
420
+
421
+ {
422
+
423
+ (*itr)->Renderer(getViewProjection());
424
+
425
+ }
426
+
427
+
428
+
429
+
430
+
431
+
432
+
433
+ glBindFramebuffer(GL_FRAMEBUFFER, 0);
434
+
435
+
436
+
437
+ glViewport(0, 0, FrameWork::windowContext->getSize().x, FrameWork::windowContext->getSize().y);
438
+
439
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
440
+
441
+
442
+
443
+
444
+
445
+
446
+
447
+
448
+
449
+ //オブジェクト
450
+
451
+ for(std::vector<std::shared_ptr<Actor>>::iterator itr = actor.begin(); itr != actor.end(); itr++)
452
+
453
+ {
454
+
455
+ (*itr)->Renderer(getViewProjection());
456
+
457
+ }
458
+
459
+
460
+
461
+ glBindFramebuffer(GL_READ_FRAMEBUFFER, framebuffer);
462
+
463
+ glBindFramebuffer(GL_DRAW_FRAMEBUFFER, intermediateFBO);
464
+
465
+ glBlitFramebuffer(0, 0, FrameWork::windowContext->getSize().x, FrameWork::windowContext->getSize().y, 0, 0, FrameWork::windowContext->getSize().x, FrameWork::windowContext->getSize().y, GL_COLOR_BUFFER_BIT, GL_NEAREST);
374
466
 
375
467
  glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
376
468
 
377
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
378
-
379
- //glBindFramebuffer(GL_FRAMEBUFFER, 0);
380
-
381
-
382
-
383
-
384
-
385
- glViewport(0, 0, SHADOW_WIDTH, SHADOW_HEIGHT);
386
-
387
- glBindFramebuffer(GL_FRAMEBUFFER, depthMapFBO);
388
-
389
- glClear(GL_DEPTH_BUFFER_BIT);
390
-
391
-
392
-
393
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
394
-
395
- //シャドウオブジェクト
396
-
397
- for(std::vector<std::shared_ptr<Actor>>::const_iterator itr = shadowActor.begin(); itr != shadowActor.end(); itr++)
398
-
399
- {
400
-
401
- (*itr)->Renderer(getViewProjection());
402
-
403
- }
404
-
405
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
406
-
407
-
408
-
409
-
410
-
411
- for(std::vector<std::shared_ptr<Actor>>::iterator itr = actor.begin(); itr != actor.end(); itr++)
412
-
413
- {
414
-
415
- (*itr)->Renderer(getViewProjection());
416
-
417
- }
418
-
419
-
420
-
421
-
422
-
423
-
424
-
425
-
426
-
427
- glViewport(0, 0, FrameWork::windowContext->getSize().x, FrameWork::windowContext->getSize().y);
428
-
429
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
430
-
431
- glViewport(0, 0, FrameWork::windowContext->getSize().x, FrameWork::windowContext->getSize().y);
432
-
433
-
434
-
435
- glBindFramebuffer(GL_READ_FRAMEBUFFER, framebuffer);
436
-
437
- glBindFramebuffer(GL_DRAW_FRAMEBUFFER, intermediateFBO);
438
-
439
- glBlitFramebuffer(0, 0, FrameWork::windowContext->getSize().x, FrameWork::windowContext->getSize().y, 0, 0, FrameWork::windowContext->getSize().x, FrameWork::windowContext->getSize().y, GL_COLOR_BUFFER_BIT, GL_NEAREST);
440
-
441
- glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
442
-
443
469
  glClear(GL_COLOR_BUFFER_BIT);
444
470
 
445
471
 
446
472
 
447
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////
473
+
448
-
449
- for(std::vector<std::shared_ptr<Actor>>::iterator itr = shadowActor.begin(); itr != shadowActor.end(); itr++)
474
+
450
-
451
- {
475
+
452
-
453
- (*itr)->RendererDepth(depthMap,getViewProjection());
454
-
455
- }
456
-
457
-
458
-
459
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////
460
-
461
-
462
476
 
463
477
 
464
478
 

1

文章を修正

2021/11/11 08:42

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -12,6 +12,14 @@
12
12
 
13
13
  ライトの位置は (0,100,-5)でカメラの位置は斜め下を向いています。単色描画で位置を確認済
14
14
 
15
+ ライトの方向は(0,-1,0)です。
16
+
17
+ モデルの位置は(0,0,-5)です。
18
+
19
+ カメラの位置は(0,0,5)です。
20
+
21
+ カメラの向きは斜め下を向いていてプレーンモデルを上から眺めています。トップビューのゲーム風
22
+
15
23
  モデルはプレーンでカメラに映っていることを単色描画で確認しました。
16
24
 
17
25
  また単色のシェーダーでは描画できたため、行列計算等の描画はできています。
@@ -22,9 +30,9 @@
22
30
 
23
31
 
24
32
 
25
-
33
+ ※: FrameWork/source/Camera.cpp ,Game/source/Ground.cpp 部です。
34
+
26
-
35
+ Github: [https://github.com/Shigurechan/TopViewGame](https://github.com/Shigurechan/TopViewGame)
27
-
28
36
 
29
37
 
30
38