質問編集履歴
5
タイトルを修正しました。
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
[OpenGL]
|
1
|
+
[OpenGL]VAO VBO が上書きされてしまう?
|
test
CHANGED
File without changes
|
4
文章を修正しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
以下の提示コードですがなぜ最後に描画指定したvoid GenerateOutput();したインスタンスのみが画面に表示されるのでしょうか?
|
2
2
|
|
3
|
-
|
3
|
+
か描画でバッファーを指定してテクスチャも設定しているのですができない理由がわかりません最後にテクスチャとバッファーの指定を解除しているのでどうすればいいのかわかりません。Github通りにコードを作って見ましたがどうすればいいのかわかりません。
|
4
|
+
|
5
|
+
|
4
6
|
|
5
7
|
|
6
8
|
|
3
文章にGithubを追加しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
以下の提示コードですがなぜ最後に描画指定したvoid GenerateOutput();したインスタンスのみが画面に表示されるのでしょうか?
|
2
2
|
|
3
|
-
多分バッファーに上書きされていると思うのですがどうすれば別のバッファーとして捉える事ができるのでしょうか?何をしていないためこうなるのでしょうか?調べましたが 検討が付きません。
|
3
|
+
多分バッファーに上書きされていると思うのですがどうすれば別のバッファーとして捉える事ができるのでしょうか?何をしていないためこうなるのでしょうか?調べましたが 検討が付きません。また参考サイトのGithubを見ながら自分のコードを比較しましたが何も間違えていないと思うのですがどうすればいいのでしょうか?
|
4
|
+
|
5
|
+
|
6
|
+
|
4
|
-
|
7
|
+
Github: https://github.com/Minganna/Shadow_Assignment/blob/43109e9d632c70304556390e403728da3202e494/src/Mesh.cpp
|
5
|
-
|
6
|
-
|
7
|
-
|
8
8
|
|
9
9
|
例 インスタンスを2つ生成して2つとも描画しようとすると最後に描画されたものしか描画されません。
|
10
10
|
|
@@ -20,54 +20,6 @@
|
|
20
20
|
|
21
21
|
```cpp
|
22
22
|
|
23
|
-
//標準ヘッダー 関係
|
24
|
-
|
25
|
-
#include <iostream>
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
//自作ヘッダー 関係
|
30
|
-
|
31
|
-
#include "../Header/Game.hpp"
|
32
|
-
|
33
|
-
#include "../Header/TransformComponent.hpp"
|
34
|
-
|
35
|
-
#include "../Header/MeshComponent.hpp"
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
//OpenGL 関係
|
40
|
-
|
41
|
-
#include "GLEW/include/GL/glew.h"
|
42
|
-
|
43
|
-
#include "gl/GL.h"
|
44
|
-
|
45
|
-
#include "GLFW/include/GLFW/glfw3.h"
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
//数学ライブラリ
|
50
|
-
|
51
|
-
#include "glm/glm.hpp"
|
52
|
-
|
53
|
-
#include "glm/gtx/euler_angles.hpp"
|
54
|
-
|
55
|
-
#include <glm/gtx/quaternion.hpp>
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
unsigned int Mesh::static_MeshNumber = 0; //インスタンス番号を管理
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
/*###########################################################################################
|
64
|
-
|
65
|
-
* Game::VertexAttribute
|
66
|
-
|
67
|
-
############################################################################################*/
|
68
|
-
|
69
|
-
class Game;
|
70
|
-
|
71
23
|
|
72
24
|
|
73
25
|
// コンストラクタ
|
@@ -174,26 +126,26 @@
|
|
174
126
|
|
175
127
|
//頂点座標
|
176
128
|
|
129
|
+
glEnableVertexAttribArray(0);
|
130
|
+
|
177
131
|
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Game::VertexAttribute), NULL);
|
178
132
|
|
179
|
-
glEnableVertexAttribArray(0);
|
180
|
-
|
181
133
|
|
182
134
|
|
183
135
|
//UV座標
|
184
136
|
|
137
|
+
glEnableVertexAttribArray(1);
|
138
|
+
|
185
139
|
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(Game::VertexAttribute), (void*)(sizeof(GLfloat) * 3));
|
186
140
|
|
187
|
-
glEnableVertexAttribArray(1);
|
188
|
-
|
189
141
|
|
190
142
|
|
191
143
|
//法線
|
192
144
|
|
145
|
+
glEnableVertexAttribArray(2);
|
146
|
+
|
193
147
|
glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, sizeof(Game::VertexAttribute), (void*)(sizeof(GLfloat) * 5));
|
194
148
|
|
195
|
-
glEnableVertexAttribArray(2);
|
196
|
-
|
197
149
|
|
198
150
|
|
199
151
|
//IBO
|
@@ -254,22 +206,46 @@
|
|
254
206
|
|
255
207
|
stbi_image_free(data);
|
256
208
|
|
209
|
+
|
210
|
+
|
211
|
+
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
212
|
+
|
213
|
+
glBindVertexArray(0);
|
214
|
+
|
257
215
|
}
|
258
216
|
|
259
217
|
|
260
218
|
|
219
|
+
|
220
|
+
|
261
221
|
// 描画
|
262
222
|
|
263
223
|
void Mesh::GenerateOutput()
|
264
224
|
|
265
225
|
{
|
266
226
|
|
267
|
-
glBindVertexArray(VAO);
|
227
|
+
glBindVertexArray(VAO);
|
268
228
|
|
269
229
|
glBindTexture(GL_TEXTURE_2D, TextureID);
|
270
230
|
|
231
|
+
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBO);
|
232
|
+
|
233
|
+
|
234
|
+
|
271
|
-
glDrawElements(GL_TRIANGLES, (GLsizei)index->size(), GL_UNSIGNED_INT,
|
235
|
+
glDrawElements(GL_TRIANGLES, (GLsizei)index->size(), GL_UNSIGNED_INT, 0);
|
236
|
+
|
237
|
+
|
238
|
+
|
239
|
+
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
240
|
+
|
241
|
+
glBindVertexArray(0);
|
242
|
+
|
243
|
+
|
272
244
|
|
273
245
|
};
|
274
246
|
|
247
|
+
|
248
|
+
|
249
|
+
|
250
|
+
|
275
251
|
```
|
2
文章を修正しました。
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
[OpenGL]最後に描画した
|
1
|
+
[OpenGL]最後に描画したものしか描画されない原因と理由が知りたい。
|
test
CHANGED
@@ -4,9 +4,9 @@
|
|
4
4
|
|
5
5
|
|
6
6
|
|
7
|
+
|
8
|
+
|
7
|
-
|
9
|
+
例 インスタンスを2つ生成して2つとも描画しようとすると最後に描画されたものしか描画されません。
|
8
|
-
|
9
|
-
|
10
10
|
|
11
11
|
|
12
12
|
|
1
文章を修正しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
以下の提示コードですがなぜ最後に描画指定したvoid GenerateOutput();したインスタンスのみが画面に表示されるのでしょうか?
|
2
2
|
|
3
|
-
多分バッファーに上書きされていると思うのですがどうすれば別のバッファーとして捉える事ができるのでしょうか?また
|
3
|
+
多分バッファーに上書きされていると思うのですがどうすれば別のバッファーとして捉える事ができるのでしょうか?何をしていないためこうなるのでしょうか?調べましたが 検討が付きません。
|
4
|
+
|
5
|
+
|
4
6
|
|
5
7
|
原因と対処方法が知りたいです。
|
6
8
|
|