質問編集履歴
5
タイトルを修正しました。
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
[OpenGL]
|
1
|
+
[OpenGL]VAO VBO が上書きされてしまう?
|
body
CHANGED
File without changes
|
4
文章を修正しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
以下の提示コードですがなぜ最後に描画指定したvoid GenerateOutput();したインスタンスのみが画面に表示されるのでしょうか?
|
2
|
-
|
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を追加しました。
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,
|
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
文章を修正しました。
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
文章を修正しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
以下の提示コードですがなぜ最後に描画指定したvoid GenerateOutput();したインスタンスのみが画面に表示されるのでしょうか?
|
2
|
-
多分バッファーに上書きされていると思うのですがどうすれば別のバッファーとして捉える事ができるのでしょうか?また
|
2
|
+
多分バッファーに上書きされていると思うのですがどうすれば別のバッファーとして捉える事ができるのでしょうか?何をしていないためこうなるのでしょうか?調べましたが 検討が付きません。
|
3
|
+
|
3
4
|
原因と対処方法が知りたいです。
|
4
5
|
|
5
6
|
|