質問編集履歴
5
タイトルを修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
OpenGL 正規化座標を引数に取る関数glm::ortho()関数
|
1
|
+
OpenGL 正規化座標を引数に取る関数glm::ortho()関数の使い方が知りたい。
|
test
CHANGED
File without changes
|
4
文章を修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
提示コードの
|
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
|
-
参考サイト
|
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
|
-
参考サイト
|
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
|
-
|
35
|
+
glm::mat4 FrameWork::Camera::getViewPerspective()
|
24
36
|
|
25
|
-
|
37
|
+
{
|
26
38
|
|
27
|
-
|
39
|
+
return glm::perspective(glm::radians(90.0f), FrameWork::GetAspect(), 0.1f, 1000.0f) * view;
|
28
40
|
|
29
|
-
|
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
|
-
|
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
|
-
|
65
|
+
}
|
66
|
+
|
67
|
+
|
38
68
|
|
39
69
|
```
|
3
文章を修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
|
10
10
|
|
11
|
-
公式リファレンス
|
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
文章とタイトルを修正
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
|
-
|
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
|
-
|
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
|
-
gl
|
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
|
-
|
37
|
+
glm::mat4 lightSpaceMatrix = lightProjection * lightView;
|
280
|
-
|
281
|
-
}
|
282
|
-
|
283
|
-
|
284
38
|
|
285
39
|
```
|
1
タイトルを修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
OpenGL 正射形行列を使って
|
1
|
+
OpenGL 正射形行列を使って描画する方法
|
test
CHANGED
File without changes
|