質問編集履歴

11

文章を修正

2021/05/23 08:51

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- 提示コードのコメント部の 頂点属性のUVデータを更新のコード部ですが毎フレーム頂点情報のUV座標を更新して反映させるにはどんな関数使えばいいしょうか?調べましたがわかりません
1
+ 提示コードのコメント部の 頂点属性のUVデータを更新のコード部ですが毎フレーム頂点情報のUV座標を更新して反映させたいのですがglBufferSubData();関数使い方が知りたいで
2
2
 
3
3
 
4
4
 

10

文章を修正しました。

2021/05/23 08:51

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- 頂点情報のUV座標を更新する方法
1
+ 頂点情報のUV座標を更新する方法 glBuffersubData();関数の使い方が知りたい。
test CHANGED
@@ -2,6 +2,36 @@
2
2
 
3
3
 
4
4
 
5
+ 確認したこと
6
+
7
+ 「 UV座標の指定を確認するためコンストラクタ部にUV指定のコードを入れましたが座標は適切でした。 」
8
+
9
+ 「glBuffersubData();関数でエラーコード0x502 が発生しているためこの関数が原因です。"現在のステートで無効な操作をしている場合、もしくは廃止された関数を呼び出した場合(*1)"」
10
+
11
+
12
+
13
+ 利用ライブラリ
14
+
15
+ glew
16
+
17
+ glfw
18
+
19
+ freetype
20
+
21
+ opengl
22
+
23
+ glmライブラリ
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+
5
35
  Github: https://github.com/Shigurechan/OpenGL_FrameWork/tree/6c59a4560a5cb4c042f557264d9ab3f9e034d7dc
6
36
 
7
37
 

9

文章を修正

2021/05/23 08:39

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
 
4
4
 
5
+ Github: https://github.com/Shigurechan/OpenGL_FrameWork/tree/6c59a4560a5cb4c042f557264d9ab3f9e034d7dc
6
+
7
+
8
+
5
9
 
6
10
 
7
11
  提示画像の右上のキャラクター

8

文章を修正

2021/05/23 05:49

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -18,6 +18,230 @@
18
18
 
19
19
  ```cpp
20
20
 
21
+ #include "Sprite.hpp"
22
+
23
+
24
+
25
+ #include <iostream>
26
+
27
+ #include <fstream>
28
+
29
+
30
+
31
+ #include <glm/glm.hpp>
32
+
33
+ #include <glm/gtc/matrix_Transform.hpp>
34
+
35
+ #include <glm/gtx/Transform.hpp>
36
+
37
+
38
+
39
+ #include "Texture.hpp"
40
+
41
+ #include "Shader.hpp"
42
+
43
+ #include "Window.hpp"
44
+
45
+ #include <stb/stb_image.h>
46
+
47
+
48
+
49
+
50
+
51
+ //コンストラクタ
52
+
53
+ FrameWork::Sprite::Sprite(std::shared_ptr<Window> w,const char* vert,const char* frag) : Transform_2D(),Shader()
54
+
55
+ {
56
+
57
+ windowContext = w; //ウインドウコンテキスト
58
+
59
+
60
+
61
+
62
+
63
+ //シェーダー読み込み
64
+
65
+
66
+
67
+ if (vert == NULL && frag == NULL)
68
+
69
+ {
70
+
71
+ vert = "Shader/2D/BasicTexture_2D.vert";
72
+
73
+ frag = "Shader/2D/BasicTexture_2D.frag";
74
+
75
+ LoadShader(vert, frag); //シェーダーロード
76
+
77
+
78
+
79
+ isDefaultShader = true;
80
+
81
+ }
82
+
83
+ else
84
+
85
+ {
86
+
87
+ LoadShader(vert, frag);
88
+
89
+
90
+
91
+ isDefaultShader = false;
92
+
93
+
94
+
95
+ }
96
+
97
+
98
+
99
+
100
+
101
+
102
+
103
+
104
+
105
+
106
+
107
+ //テクスチャ関係
108
+
109
+ textureID = std::vector<TextureData>(0); //テクスチャーデータ
110
+
111
+ textureUnitCount = 0; //テクスチャユニット数をカウント
112
+
113
+
114
+
115
+
116
+
117
+ //vao
118
+
119
+ glGenVertexArrays(1, &vao);
120
+
121
+ glBindVertexArray(vao);
122
+
123
+
124
+
125
+ //vbo
126
+
127
+ glGenBuffers(1, &vbo);
128
+
129
+ glBindBuffer(GL_ARRAY_BUFFER, vbo);
130
+
131
+
132
+
133
+ //頂点
134
+
135
+ GLint attrib = getAttribLocation("vertexPosition");
136
+
137
+ glEnableVertexAttribArray(attrib);
138
+
139
+ glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(VertexUV), rectangleVertex, GL_STATIC_DRAW);
140
+
141
+ glVertexAttribPointer(attrib, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(GLfloat), (GLvoid*)0);
142
+
143
+ setBindAttribVertex("vertexPosition");
144
+
145
+
146
+
147
+ //UV
148
+
149
+ attrib = getAttribLocation("vertexUV");
150
+
151
+ glEnableVertexAttribArray(attrib);
152
+
153
+ glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(VertexUV), rectangleVertex, GL_STATIC_DRAW);
154
+
155
+ glVertexAttribPointer(attrib, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(GLfloat), (GLvoid*)(sizeof(GLfloat) * 2));
156
+
157
+ setBindAttribVertex("vertexUV");
158
+
159
+
160
+
161
+
162
+
163
+ //アルファブレンド有効
164
+
165
+ glEnable(GL_BLEND);
166
+
167
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
168
+
169
+ }
170
+
171
+
172
+
173
+
174
+
175
+ // ######################################## メンバ関数 ########################################
176
+
177
+
178
+
179
+ //テクスチャ設定
180
+
181
+ void FrameWork::Sprite::setTexture(TextureData tex)
182
+
183
+ {
184
+
185
+
186
+
187
+ textureID.push_back(tex); //テクスチャーIDに追加
188
+
189
+
190
+
191
+
192
+
193
+ glGenTextures(1, &textureID.back().ID); //テクスチャIDの生成
194
+
195
+
196
+
197
+ //バインド
198
+
199
+ glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
200
+
201
+ glBindTexture(GL_TEXTURE_2D, textureID.back().ID);
202
+
203
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, textureID.back().size.x, textureID.back().size.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, textureID.back().fileData);
204
+
205
+
206
+
207
+ // テクスチャの補間設定
208
+
209
+ glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
210
+
211
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
212
+
213
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
214
+
215
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
216
+
217
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
218
+
219
+
220
+
221
+ textureID.back().textureUnitNumber = GL_TEXTURE0 + (unsigned short int)textureUnitCount;
222
+
223
+ assert(textureID.back().textureUnitNumber < GL_TEXTURE31);//エラー表示
224
+
225
+
226
+
227
+ textureUnitCount++; //テクスチャーユニットカウントに加算
228
+
229
+ }
230
+
231
+
232
+
233
+ //描画するアクティブなテクスチャに指定
234
+
235
+ void FrameWork::Sprite::setDrawTextureID(unsigned char id)
236
+
237
+ {
238
+
239
+ //assert(id < textureID.size());
240
+
241
+ glActiveTexture(textureID.at(id).textureUnitNumber);
242
+
243
+ }
244
+
21
245
 
22
246
 
23
247
  //描画
@@ -60,9 +284,9 @@
60
284
 
61
285
 
62
286
 
63
- std::cout << textureID.at(texNum).size.x << std::endl;
287
+ //std::cout << textureID.at(texNum).size.x << std::endl;
64
-
288
+
65
- std::cout << textureID.at(texNum).size.y << std::endl;
289
+ //std::cout << textureID.at(texNum).size.y << std::endl;
66
290
 
67
291
 
68
292
 
@@ -112,19 +336,7 @@
112
336
 
113
337
 
114
338
 
115
- //UV
116
-
117
- GLint attrib = getAttribLocation("vertexUV");
118
-
119
- glEnableVertexAttribArray(attrib);
120
-
121
- glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(VertexUV), rectangleVertex, GL_STATIC_DRAW);
339
+ //glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(VertexUV) * 6, rectangleVertex);
122
-
123
- glVertexAttribPointer(attrib, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(GLfloat), (GLvoid*)(sizeof(GLfloat) * 2));
124
-
125
- setBindAttribVertex("vertexUV");
126
-
127
-
128
340
 
129
341
 
130
342
 
@@ -208,4 +420,54 @@
208
420
 
209
421
 
210
422
 
423
+
424
+
425
+ //デストラクタ
426
+
427
+ FrameWork::Sprite::~Sprite()
428
+
429
+ {
430
+
431
+
432
+
433
+ //std::cout << "デストラクタ" << std::endl;
434
+
435
+
436
+
437
+ //テクスチャーIDを開放
438
+
439
+ for (int i = 0; i < textureID.size(); i++)
440
+
441
+ {
442
+
443
+ glDeleteTextures(1,&textureID.at(i).ID);
444
+
445
+
446
+
447
+ stbi_image_free(textureID.at(i).fileData);
448
+
449
+ textureID.at(i).fileData = NULL;
450
+
451
+
452
+
453
+
454
+
455
+
456
+
457
+ }
458
+
459
+
460
+
461
+ glDeleteVertexArrays(1, &vao);
462
+
463
+ glDeleteBuffers(1, &vbo);
464
+
465
+
466
+
467
+ }
468
+
469
+
470
+
471
+
472
+
211
473
  ```

7

提示画像を追加

2021/05/23 05:28

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -2,14 +2,18 @@
2
2
 
3
3
 
4
4
 
5
+
6
+
7
+ 提示画像の右上のキャラクター
8
+
9
+ ![イメージ説明](85370e6d6b564a07095040bd79228ecd.png)
10
+
5
11
  参考サイト: https://www.it-swarm-ja.com/ja/opengl/opengl%E9%A0%82%E7%82%B9%E3%83%90%E3%83%83%E3%83%95%E3%82%A1%E3%83%BC%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B%E9%81%A9%E5%88%87%E3%81%AA%E6%96%B9%E6%B3%95%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F/1072569757/
6
12
 
7
13
 
8
14
 
9
15
  参考サイト: https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glBufferSubData.xhtml
10
16
 
11
-
12
-
13
17
  参考サイト: https://qiita.com/uechoco@github/items/08e401761bddd17b4c3f
14
18
 
15
19
  ```cpp

6

参考サイトを追加

2021/05/23 05:27

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -8,6 +8,10 @@
8
8
 
9
9
  参考サイト: https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glBufferSubData.xhtml
10
10
 
11
+
12
+
13
+ 参考サイト: https://qiita.com/uechoco@github/items/08e401761bddd17b4c3f
14
+
11
15
  ```cpp
12
16
 
13
17
 

5

文章を修正

2021/05/23 05:05

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,11 @@
2
2
 
3
3
 
4
4
 
5
-
5
+ 参考サイト: https://www.it-swarm-ja.com/ja/opengl/opengl%E9%A0%82%E7%82%B9%E3%83%90%E3%83%83%E3%83%95%E3%82%A1%E3%83%BC%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B%E9%81%A9%E5%88%87%E3%81%AA%E6%96%B9%E6%B3%95%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F/1072569757/
6
+
7
+
8
+
9
+ 参考サイト: https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glBufferSubData.xhtml
6
10
 
7
11
  ```cpp
8
12
 

4

文章を修正

2021/05/23 04:55

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- glBufferSubData()関数使いが知りたい。
1
+ 頂点情報UV座標を更新する
test CHANGED
@@ -1,80 +1,8 @@
1
- 提示コードのPlayer::Draw()関数部ですがなぜUV座標を指定してるにわらず画像が全体表示されてしまうのでしょうかglBufferSubData();関がうまく機能してためなのですがどうすれば正常に機能することができるのでしょうか?調べましたがこの関数の使い方がよくわからずUV座標を指定しても反映されません UV座標の設定コードをコンストラクタで行いUV座標の位置を確かめましたが適切な位置でした
2
-
3
-
4
-
5
- CELL 96
6
-
7
- SizeX 96
8
-
9
- sizeY 48
1
+ 提示コードのコメントの 頂点属性のUVデータを更新のコード部ですが毎フレーム頂点情報のUV座標を更新して反映させるにはどんな関数を使えばいいのでしょうか?調べましたがわかません。
10
2
 
11
3
 
12
4
 
13
5
 
14
-
15
-
16
-
17
- 使用ライブラリ
18
-
19
- glew
20
-
21
- glfw
22
-
23
- freetype
24
-
25
- opengl
26
-
27
-
28
-
29
- Github https://github.com/Shigurechan/OpenGL_FrameWork
30
-
31
- 公式リファレンス: https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glBufferSubData.xhtml
32
-
33
- ![イメージ説明](dcbda7a3c86fea06acc152985953e590.png)
34
-
35
-
36
-
37
- ```cpp
38
-
39
- void Player::Draw() const
40
-
41
- {
42
-
43
-
44
-
45
- if (a == 0)
46
-
47
- {
48
-
49
- //sprite->DrawGraph(position, 0, 0, glm::vec2(0, 0), glm::vec2(0, 0), glm::vec2(CELL * 2, CELL));
50
-
51
- }
52
-
53
- else if(a == 1)
54
-
55
- {
56
-
57
-
58
-
59
-
60
-
61
- }
62
-
63
-
64
-
65
- sprite->DrawGraph(position, 0, 0, glm::vec2(0, 0), glm::vec2(CELL, 0), glm::vec2(CELL * 2, CELL));
66
-
67
-
68
-
69
-
70
-
71
-
72
-
73
- }
74
-
75
-
76
-
77
- ```
78
6
 
79
7
  ```cpp
80
8
 
@@ -110,6 +38,8 @@
110
38
 
111
39
 
112
40
 
41
+
42
+
113
43
  //UVサイズからピクセルサイズを算出
114
44
 
115
45
  const float sizeX = 1.0f / (float)textureID.at(texNum).size.x;
@@ -122,7 +52,7 @@
122
52
 
123
53
  std::cout << textureID.at(texNum).size.y << std::endl;
124
54
 
125
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
55
+
126
56
 
127
57
 
128
58
 
@@ -166,13 +96,31 @@
166
96
 
167
97
  rectangleVertex[5].uv[1] = 1.0f - (sizeY * ((endSize.y - startSize.y) + startSize.y));
168
98
 
169
- glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(Transform_2D::VertexUV) * 6, rectangleVertex); //頂点データを再変更
170
99
 
100
+
101
+
102
+
103
+ //UV
104
+
105
+ GLint attrib = getAttribLocation("vertexUV");
106
+
107
+ glEnableVertexAttribArray(attrib);
108
+
109
+ glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(VertexUV), rectangleVertex, GL_STATIC_DRAW);
110
+
171
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
111
+ glVertexAttribPointer(attrib, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(GLfloat), (GLvoid*)(sizeof(GLfloat) * 2));
112
+
113
+ setBindAttribVertex("vertexUV");
114
+
115
+
116
+
117
+
172
118
 
173
119
 
174
120
 
175
121
  // ###################################################
122
+
123
+
176
124
 
177
125
 
178
126
 
@@ -192,7 +140,7 @@
192
140
 
193
141
  setTranslate(glm::vec3(pos.x + (getSizeScale().x / 2.0f), pos.y + (getSizeScale().y / 2.0f), 0.0f)); //平行移動
194
142
 
195
-
143
+
196
144
 
197
145
 
198
146
 

3

文章を修正

2021/05/23 04:29

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- 提示コードのPlayer::Draw()関数部ですがなぜUV座標を指定しているにも関わらず画像が全体表示されてしまうのでしょうかglBufferSubData();関数がうまく機能していないためなのですがどうすれば正常に機能することができるのでしょうか?調べましたがこの関数の使い方がよくわからずUV座標を指定しても反映されません。
1
+ 提示コードのPlayer::Draw()関数部ですがなぜUV座標を指定しているにも関わらず画像が全体表示されてしまうのでしょうかglBufferSubData();関数がうまく機能していないためなのですがどうすれば正常に機能することができるのでしょうか?調べましたがこの関数の使い方がよくわからずUV座標を指定しても反映されません UV座標の設定コードをコンストラクタで行いUV座標の位置を確かめましたが適切な位置でした
2
2
 
3
3
 
4
4
 

2

文章を修正

2021/05/23 04:16

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -10,6 +10,24 @@
10
10
 
11
11
 
12
12
 
13
+
14
+
15
+
16
+
17
+ 使用ライブラリ
18
+
19
+ glew
20
+
21
+ glfw
22
+
23
+ freetype
24
+
25
+ opengl
26
+
27
+
28
+
29
+ Github https://github.com/Shigurechan/OpenGL_FrameWork
30
+
13
31
  公式リファレンス: https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glBufferSubData.xhtml
14
32
 
15
33
  ![イメージ説明](dcbda7a3c86fea06acc152985953e590.png)

1

文章を修正しました。

2021/05/22 07:19

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
 
4
4
 
5
+ CELL 96
6
+
7
+ SizeX 96
8
+
9
+ sizeY 48
10
+
5
11
 
6
12
 
7
13
  公式リファレンス: https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glBufferSubData.xhtml