teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

5

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

2020/12/27 13:08

投稿

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

4

文章を修正しました。

2020/12/27 13:08

投稿

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

3

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

2020/12/27 12:30

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,7 +1,7 @@
1
1
  以下の提示コードですがなぜ最後に描画指定したvoid GenerateOutput();したインスタンスのみが画面に表示されるのでしょうか?
2
- 多分バッファーに上書きされていると思うのですがどうすれば別のバッファーとして捉える事ができるのでしょうか?何をしていないためこうなるのでしょうか?調べましたが 検討が付きません。
2
+ 多分バッファーに上書きされていると思うのですがどうすれば別のバッファーとして捉える事ができるのでしょうか?何をしていないためこうなるのでしょうか?調べましたが 検討が付きません。また参考サイトのGithubを見ながら自分のコードを比較しましたが何も間違えていないと思うのですがどうすればいいのでしょうか?
3
3
 
4
-
4
+ Github: https://github.com/Minganna/Shadow_Assignment/blob/43109e9d632c70304556390e403728da3202e494/src/Mesh.cpp
5
5
  例 インスタンスを2つ生成して2つとも描画しようとすると最後に描画されたものしか描画されません。
6
6
 
7
7
 
@@ -9,31 +9,7 @@
9
9
 
10
10
 
11
11
  ```cpp
12
- //標準ヘッダー 関係
13
- #include <iostream>
14
12
 
15
- //自作ヘッダー 関係
16
- #include "../Header/Game.hpp"
17
- #include "../Header/TransformComponent.hpp"
18
- #include "../Header/MeshComponent.hpp"
19
-
20
- //OpenGL 関係
21
- #include "GLEW/include/GL/glew.h"
22
- #include "gl/GL.h"
23
- #include "GLFW/include/GLFW/glfw3.h"
24
-
25
- //数学ライブラリ
26
- #include "glm/glm.hpp"
27
- #include "glm/gtx/euler_angles.hpp"
28
- #include <glm/gtx/quaternion.hpp>
29
-
30
- unsigned int Mesh::static_MeshNumber = 0; //インスタンス番号を管理
31
-
32
- /*###########################################################################################
33
- * Game::VertexAttribute
34
- ############################################################################################*/
35
- class Game;
36
-
37
13
  // コンストラクタ
38
14
  Mesh::Mesh(class Game* g, const char* texture, std::vector<Game::VertexAttribute> &vert, std::vector<unsigned int> &idx) : Transform(g)
39
15
  {
@@ -86,16 +62,16 @@
86
62
  glBufferData(GL_ARRAY_BUFFER, std::size(*vertex) * sizeof(Game::VertexAttribute), std::data(*vertex) ,GL_STATIC_DRAW);
87
63
 
88
64
  //頂点座標
65
+ glEnableVertexAttribArray(0);
89
66
  glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Game::VertexAttribute), NULL);
90
- glEnableVertexAttribArray(0);
91
67
 
92
68
  //UV座標
69
+ glEnableVertexAttribArray(1);
93
70
  glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(Game::VertexAttribute), (void*)(sizeof(GLfloat) * 3));
94
- glEnableVertexAttribArray(1);
95
71
 
96
72
  //法線
73
+ glEnableVertexAttribArray(2);
97
74
  glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, sizeof(Game::VertexAttribute), (void*)(sizeof(GLfloat) * 5));
98
- glEnableVertexAttribArray(2);
99
75
 
100
76
  //IBO
101
77
  glGenBuffers(1, &IBO);
@@ -126,13 +102,25 @@
126
102
  glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, largest);
127
103
 
128
104
  stbi_image_free(data);
105
+
106
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
107
+ glBindVertexArray(0);
129
108
  }
130
109
 
110
+
131
111
  // 描画
132
112
  void Mesh::GenerateOutput()
133
113
  {
134
- glBindVertexArray(VAO);
114
+ glBindVertexArray(VAO);
135
115
  glBindTexture(GL_TEXTURE_2D, TextureID);
116
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBO);
117
+
136
- glDrawElements(GL_TRIANGLES, (GLsizei)index->size(), GL_UNSIGNED_INT, NULL);
118
+ glDrawElements(GL_TRIANGLES, (GLsizei)index->size(), GL_UNSIGNED_INT, 0);
119
+
120
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
121
+ glBindVertexArray(0);
122
+
137
123
  };
124
+
125
+
138
126
  ```

2

文章を修正しました。

2020/12/27 11:16

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- [OpenGL]最後に描画したメッチュみが表示され原因が知りたい。
1
+ [OpenGL]最後に描画したしか描画されない原因と理由が知りたい。
body CHANGED
@@ -1,8 +1,8 @@
1
1
  以下の提示コードですがなぜ最後に描画指定したvoid GenerateOutput();したインスタンスのみが画面に表示されるのでしょうか?
2
2
  多分バッファーに上書きされていると思うのですがどうすれば別のバッファーとして捉える事ができるのでしょうか?何をしていないためこうなるのでしょうか?調べましたが 検討が付きません。
3
3
 
4
- 原因と対処方法が知りたいです。
5
4
 
5
+ 例 インスタンスを2つ生成して2つとも描画しようとすると最後に描画されたものしか描画されません。
6
6
 
7
7
 
8
8
 

1

文章を修正しました。

2020/12/27 11:13

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,5 +1,6 @@
1
1
  以下の提示コードですがなぜ最後に描画指定したvoid GenerateOutput();したインスタンスのみが画面に表示されるのでしょうか?
2
- 多分バッファーに上書きされていると思うのですがどうすれば別のバッファーとして捉える事ができるのでしょうか?また
2
+ 多分バッファーに上書きされていると思うのですがどうすれば別のバッファーとして捉える事ができるのでしょうか?何をしていないためこうなるのでしょうか?調べが 検討が付きません。
3
+
3
4
  原因と対処方法が知りたいです。
4
5
 
5
6