質問編集履歴

5

タイトルを修正

2021/12/24 13:51

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- OpenGL 正規化座標を引数に取る関数glm::ortho()関数に引数にどうった値を入れたらいいのか知りたい。
1
+ OpenGL 正規化座標を引数に取る関数glm::ortho()関数の使方が知りたい。
test CHANGED
File without changes

4

文章を修正

2021/12/24 13:51

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,6 @@
1
- 提示コードの関数`glm::ortho(-1.0f,1.0f,-1.0f,1.0f,near_plane, far_plane);`部ですが前から四つの引数に正規化座標入れのですが色んな値を入れてみたですが画面のアスペクト比のようなもがおかいの透視射形行列時と違い大きさが変形しています。こ引数には何をれたらいいのでしょうか?
1
+ 提示コードですが正射投影行列を使って2Dオブジェクトを配置したいですがこの場合glm::ortho()関数を使って画面の左上に0,0として画面に等倍で100,100の大きさ表示させたいのですがこれには値をのように設定すればいいょう?提示画像は100,100の大きさのには小さので間違ててると思ます。
2
+
3
+ 提示サイトより下部の2Dゲームの説明部のように画面の中央に表示させる方法で実装を試しましたが表示される形異様に小さいです。
2
4
 
3
5
 
4
6
 
@@ -6,34 +8,62 @@
6
8
 
7
9
 
8
10
 
11
+ ##### 状態
12
+
13
+ スクリーンサイズ(800,x600)
14
+
15
+ オブジェクトのサイズ100,100
16
+
17
+ オブジェクト座標0,0
9
18
 
10
19
 
11
- 公式リファレンス [https://glm.g-truc.net/0.9.2/api/a00245.html#gad25e5b029ebefac5b657861378c17aa8](https://glm.g-truc.net/0.9.2/api/a00245.html#gad25e5b029ebefac5b657861378c17aa8)
12
20
 
13
- 参考サイトA: [https://learnopengl.com/Getting-Started/Coordinate-Systems](https://learnopengl.com/Getting-Started/Coordinate-Systems)
21
+ 参考サイト(公式リファレンス): [https://glm.g-truc.net/0.9.2/api/a00245.html](https://glm.g-truc.net/0.9.2/api/a00245.html)
14
22
 
15
- 参考サイトB: [ https://sbfl.net/blog/2016/09/05/webgl2-tutorial-3d-knowledge/](https://sbfl.net/blog/2016/09/05/webgl2-tutorial-3d-knowledge/)
23
+ 参考サイト: [https://gamedev.stackexchange.com/questions/195129/orthographic-projection-not-showing-a-triangle](https://gamedev.stackexchange.com/questions/195129/orthographic-projection-not-showing-a-triangle)
24
+
25
+ ![イメージ説明](4cd55bb12d0def6355ce856594e30229.png)
16
26
 
17
27
 
18
28
 
19
29
 
20
30
 
31
+ ```
21
32
 
33
+ // ##################################### 透視投影行列 #####################################
22
34
 
23
- ```cpp
35
+ glm::mat4 FrameWork::Camera::getViewPerspective()
24
36
 
25
- float near_plane = 0.1f, far_plane = 700;
37
+ {
26
38
 
27
- //glm::mat4 lightProjection = glm::perspective(glm::radians(90.0f), 4.0f / 3.0f, near_plane,far_plane);
39
+ return glm::perspective(glm::radians(90.0f), FrameWork::GetAspect(), 0.1f, 1000.0f) * view;
28
40
 
29
- glm::mat4 lightProjection = glm::ortho(-1.0f,1.0f,-1.0f,1.0f,near_plane, far_plane);
41
+ }
30
42
 
31
43
 
32
44
 
45
+ // ##################################### 正射投影行列 #####################################
46
+
47
+ glm::mat4 FrameWork::Camera::getViewOrthographic()
48
+
49
+ {
50
+
51
+ //return glm::ortho(0.0f, (float)windowContext->getSize().x, (float)windowContext->getSize().y, 0.0f, 0.1f, 1000.0f) * view;
52
+
53
+ //return glm::ortho(0.0f, (float)windowContext->getSize().x, (float)windowContext->getSize().y, 0.0f, -0.1f, 1000.0f);
54
+
33
- glm::mat4 lightView = glm::lookAt(glm::vec3(0, 0, 10.0), glm::vec3(0.0f, 0.0f, -1.0f), glm::vec3(0.0f, 1.0f, 0.0f));
55
+ //return glm::ortho(0.0f, 1.0f, 0.0f, 1.0f, 0.1f, 100.0f) * view;
56
+
57
+ return glm::ortho(-((float)windowContext->getSize().x / 4) * FrameWork::GetAspect() , +((float)windowContext->getSize().x / 4) * FrameWork::GetAspect(),
58
+
59
+ -((float)windowContext->getSize().y / 4) * FrameWork::GetAspect(), +((float)windowContext->getSize().y / 4) * FrameWork::GetAspect(), 0.1f, 1000.0f) * view;
34
60
 
35
61
 
36
62
 
63
+
64
+
37
- glm::mat4 lightSpaceMatrix = lightProjection * lightView;
65
+ }
66
+
67
+
38
68
 
39
69
  ```

3

文章を修正

2021/12/24 13:08

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
 
10
10
 
11
- 公式リファレンス: [https://glm.g-truc.net/0.9.2/api/a00245.html#gad25e5b029ebefac5b657861378c17aa8](https://glm.g-truc.net/0.9.2/api/a00245.html#gad25e5b029ebefac5b657861378c17aa8)
11
+ 公式リファレンス [https://glm.g-truc.net/0.9.2/api/a00245.html#gad25e5b029ebefac5b657861378c17aa8](https://glm.g-truc.net/0.9.2/api/a00245.html#gad25e5b029ebefac5b657861378c17aa8)
12
12
 
13
13
  参考サイトA: [https://learnopengl.com/Getting-Started/Coordinate-Systems](https://learnopengl.com/Getting-Started/Coordinate-Systems)
14
14
 

2

文章とタイトルを修正

2021/12/19 06:35

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- OpenGL 正射形行列使て描画する方法
1
+ OpenGL 正規化座標引数に取る関数glm::ortho()関数に引数にどういた値を入れたらいいのか知りたい。
test CHANGED
@@ -1,14 +1,4 @@
1
- 提示画像ですが透視射形行列は画像よう描画されるのですが正射形にすると描画されませはなぜしょうか?以下のように深度バッファを使わ場合と使う場合両方を実験してまたカメラ行列を掛ける場合そうじゃな場合の両方を試しまたが上手く画面表示さませんこれはなぜでしょうか?
1
+ 提示コードの関数`glm::ortho(-1.0f,1.0f,-1.0f,1.0f,near_plane, far_plane);`部ですが前から四つの引数正規化座標を入れるのですがな値を入てみたのすが画面アスペクト比のようなものがおかしいのか透視射形行列の時大きさが変形ていす。この引数は何をいたらいいのでしょうか?
2
-
3
-
4
-
5
-
6
-
7
- ##### 試したこと
8
-
9
- 深度バッファを使わい場合と使う場合の両方を実験
10
-
11
- カメラ行列を掛ける場合とそうじゃない場合の両方を実験
12
2
 
13
3
 
14
4
 
@@ -16,245 +6,13 @@
16
6
 
17
7
 
18
8
 
19
- ![イメージ説明](4bef35a00dceaed670c94e0a4ee48d95.png)
20
-
21
- ##### 描画ループ
22
-
23
- ```cpp
24
9
 
25
10
 
11
+ 公式リファレンス: [https://glm.g-truc.net/0.9.2/api/a00245.html#gad25e5b029ebefac5b657861378c17aa8](https://glm.g-truc.net/0.9.2/api/a00245.html#gad25e5b029ebefac5b657861378c17aa8)
26
12
 
27
- // ##################################### 描画 #####################################
13
+ 参考サイトA: [https://learnopengl.com/Getting-Started/Coordinate-Systems](https://learnopengl.com/Getting-Started/Coordinate-Systems)
28
14
 
29
- void FrameWork::Camera::Renderer()
30
-
31
- {
32
-
33
- glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
34
-
35
- glEnable(GL_DEPTH_TEST);
36
-
37
- glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
38
-
39
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
40
-
41
-
42
-
43
- //sprite.Draw(getViewProjection(), glm::vec3(0, 0, -100), 0, 0.0f, glm::vec2(1.0, 1.0), glm::vec2(0, 0), glm::vec2(100, 100));
44
-
45
- // sprite.Draw(getViewProjection_2D(), glm::vec3(0, 0, 0), 0, 0.0f, glm::vec2(1.0, 1.0), glm::vec2(0, 0), glm::vec2(100, 100));
46
-
47
-
48
-
49
- FrameWork::D2::DrawText("font/PressStart2P.ttf", glm::vec2(100, 100), 25, FrameWork::GetRGBColor(glm::vec4(0, 255, 0, 255)), "Hello World");
50
-
51
-
52
-
53
- //sprite.Draw(getViewProjection_2D(), glm::vec3(400, 400, -1), 0, 0.0f, glm::vec2(1.0, 1.0), glm::vec2(0, 0), glm::vec2(100, 100));
54
-
55
- sprite.Draw(getViewProjection_2D(), glm::vec3(0, 0, -1), 0, 0.0f, glm::vec2(1.0, 1.0), glm::vec2(0, 0), glm::vec2(10, 10));
56
-
57
-
58
-
59
- glDisable(GL_DEPTH_TEST);
60
-
61
- sprite.Draw(getViewProjection_2D(), glm::vec3(0, 0, -1), 0, 0.0f, glm::vec2(1.0, 1.0), glm::vec2(0, 0), glm::vec2(10, 10));
62
-
63
-
64
-
65
- //sprite.Draw(getViewProjection_2D(), glm::vec3(0,0,-1), 0, 0.0f, glm::vec2(1.0, 1.0), glm::vec2(0, 0), glm::vec2(100, 100));
66
-
67
-
68
-
69
-
70
-
71
- glBindFramebuffer(GL_FRAMEBUFFER, 0);
72
-
73
- glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
74
-
75
- glClear(GL_COLOR_BUFFER_BIT);
76
-
77
-
78
-
79
-
80
-
81
- glDisable(GL_DEPTH_TEST);
82
-
83
- glBindVertexArray(quadVAO);
84
-
85
- glBindBuffer(GL_ARRAY_BUFFER, quadVBO);
86
-
87
- shader.setEnable();
88
-
89
- glBindTexture(GL_TEXTURE_2D, textureColorbuffer);
90
-
91
- glActiveTexture(GL_TEXTURE0);
92
-
93
- glDrawArrays(GL_TRIANGLES, 0, 6);
94
-
95
- shader.setDisable();
96
-
97
-
98
-
99
-
100
-
101
- glBindVertexArray(0);
102
-
103
- glBindBuffer(GL_ARRAY_BUFFER, 0);
104
-
105
- actor.clear();
106
-
107
- shadowActor.clear();
108
-
109
-
110
-
111
- }
112
-
113
-
114
-
115
- ```
116
-
117
-
118
-
119
-
120
-
121
- ##### 行列初期化
122
-
123
- ```cpp
124
-
125
-
126
-
127
-
128
-
129
- scale = glm::mat4(); //拡大縮小
130
-
131
- rotate = glm::mat4(); //回転
132
-
133
- translate = glm::mat4(); //平行移動
134
-
135
-
136
-
137
- //描画行列
138
-
139
- position = glm::vec3(0,0,5); //座標
140
-
141
- vecLook = glm::vec3(0,0,-1); //向き(視線)
142
-
143
- view = glm::lookAt(glm::vec3(position.x, position.y, position.z), vecLook, glm::vec3(0, 1, 0)); //ビュー行列
144
-
145
- projection = glm::perspective(glm::radians(90.0f), 4.0f / 3.0f, 0.1f, 10000.0f); //透視射形行列
146
-
147
-
148
-
149
- ```
150
-
151
- ##### 正射形
152
-
153
- ```cpp
154
-
155
-
156
-
157
- // ##################################### 2D ビュー行列を取得 正射形 #####################################
158
-
159
- glm::mat4 FrameWork::Camera::getViewProjection_2D()
160
-
161
- {
162
-
163
- //return glm::ortho(0.0f, (float)FrameWork::windowContext->getSize().x, (float)FrameWork::windowContext->getSize().y, 0.0f, 0.1f, 1000.0f);
164
-
165
- return glm::ortho(0.0f, (float)FrameWork::windowContext->getSize().x, 0.0f, (float)FrameWork::windowContext->getSize().y) * view;
166
-
167
- }
168
-
169
-
170
-
171
- ```
172
-
173
-
174
-
175
- ##### Sprite
176
-
177
- ```
178
-
179
- // ##################################### 描画 #####################################
180
-
181
- void FrameWork::D2::Sprite::Draw(glm::mat4 projection,glm::vec3 position, int texNum, float r, glm::vec2 s, glm::vec2 start, glm::vec2 end)
182
-
183
- {
184
-
185
-
186
-
187
- shaderTexture.setEnable();
188
-
189
- glBindVertexArray(vao);
190
-
191
- glBindBuffer(GL_ARRAY_BUFFER, vbo);
192
-
193
-
194
-
195
- startSize = start; //テクスチャ始点
196
-
197
- endSize = end; //テクスチャ終点
198
-
199
-
200
-
201
- setAttribute(); //頂点属性 設定
202
-
203
- setNormal(); //法線 設定
204
-
205
-
206
-
207
-
208
-
209
- glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(VertexAttribute) * vertex->size(), vertex->data());
210
-
211
-
212
-
213
- //Transform
214
-
215
- //glm::vec3 pos = position;
216
-
217
- //pos.y = (float)FrameWork::windowContext->getSize().y - pos.y - (glm::vec2(end - start).y / 2);
218
-
219
- //pos.x = pos.x + (glm::vec2(end - start).x / 2);
220
-
221
- //setPosition(pos); //座標
222
-
223
-
224
-
225
-
226
-
227
- setPosition(position);
228
-
229
-
230
-
231
- setScale(s + glm::vec2(end - start)); //スケール
232
-
233
- //setScale(glm::vec2(100,100)); //スケール
234
-
235
- setRotate(r); //回転
236
-
237
-
238
-
239
- //描画
240
-
241
- shaderTexture.setUniformMatrix4fv("uTranslate",getMatTranslation());
242
-
243
- shaderTexture.setUniformMatrix4fv("uRotate", getMatRotate());
244
-
245
- shaderTexture.setUniformMatrix4fv("uScale", getMatScale());
246
-
247
- shaderTexture.setUniformMatrix4fv("uViewProjection", projection);
248
-
249
- //shaderTexture.setUniformMatrix4fv("uViewProjection", glm::ortho(0.0f, (float)FrameWork::windowContext->getSize().x, 0.0f, (float)FrameWork::windowContext->getSize().y));
15
+ 参考サイトB: [ https://sbfl.net/blog/2016/09/05/webgl2-tutorial-3d-knowledge/](https://sbfl.net/blog/2016/09/05/webgl2-tutorial-3d-knowledge/)
250
-
251
- //printf("%d\n",textureID.at(texNum));
252
-
253
-
254
-
255
- glActiveTexture(GL_TEXTURE0); //テクスチャ有効
256
-
257
- glBindTexture(GL_TEXTURE_2D, textureID.at(texNum)); //テクスチャバインド
258
16
 
259
17
 
260
18
 
@@ -262,24 +20,20 @@
262
20
 
263
21
 
264
22
 
23
+ ```cpp
24
+
265
- glDrawArrays(GL_TRIANGLES, 0, vertex->size()); //描画
25
+ float near_plane = 0.1f, far_plane = 700;
26
+
27
+ //glm::mat4 lightProjection = glm::perspective(glm::radians(90.0f), 4.0f / 3.0f, near_plane,far_plane);
28
+
29
+ glm::mat4 lightProjection = glm::ortho(-1.0f,1.0f,-1.0f,1.0f,near_plane, far_plane);
266
30
 
267
31
 
268
32
 
269
- //バインド解除
270
-
271
- glBindVertexArray(0);
272
-
273
- glBindBuffer(GL_ARRAY_BUFFER, 0);
274
-
275
- glBindTexture(GL_TEXTURE_2D, 0);
33
+ glm::mat4 lightView = glm::lookAt(glm::vec3(0, 0, 10.0), glm::vec3(0.0f, 0.0f, -1.0f), glm::vec3(0.0f, 1.0f, 0.0f));
276
34
 
277
35
 
278
36
 
279
- shaderTexture.setDisable();
37
+ glm::mat4 lightSpaceMatrix = lightProjection * lightView;
280
-
281
- }
282
-
283
-
284
38
 
285
39
  ```

1

タイトルを修正

2021/12/18 09:09

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- OpenGL 正射形行列を使ってスプライトを描画が出来ない。
1
+ OpenGL 正射形行列を使って描画する方法
test CHANGED
File without changes