質問編集履歴

5

タイトルを修正しました。

2020/12/27 13:08

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- [OpenGL]最後に描画したものしか描画されない原因と理由が知りたい。
1
+ [OpenGL]VAO VBO が上書きされてしまう?
test CHANGED
File without changes

4

文章を修正しました。

2020/12/27 13:08

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,8 @@
1
1
  以下の提示コードですがなぜ最後に描画指定したvoid GenerateOutput();したインスタンスのみが画面に表示されるのでしょうか?
2
2
 
3
- 多分バッファーに上書きされていると思うのですがどうすれば別のバッファーして捉え事ができるのでしょか?何をしてためこうなるでしょう?調べしたが 検討が付きません。また参考サイトのGithubを見ながら自分のコードを比較しましたが何も間違えていないと思うのですがどうすればいいのでしょう
3
+ か描画でバッファーを指定しテクスチャも設定しているのですができない理由がわかりません最後にテクスチャとバッファーの指定を解除してるのですればいいのかわかりません。Github通りにコードを作って見ましたがどうすればいいのかわかりません。
4
+
5
+
4
6
 
5
7
 
6
8
 

3

文章にGithubを追加しました。

2020/12/27 12:30

投稿

退会済みユーザー
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, NULL);
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

文章を修正しました。

2020/12/27 11:16

投稿

退会済みユーザー
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

文章を修正しました。

2020/12/27 11:13

投稿

退会済みユーザー
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