質問編集履歴

5

追記

2020/02/16 03:01

投稿

hikar
hikar

スコア13

test CHANGED
File without changes
test CHANGED
@@ -293,3 +293,45 @@
293
293
  }
294
294
 
295
295
  ```
296
+
297
+ 追記
298
+
299
+ ```ここに言語を入力
300
+
301
+ int pixecls_[25] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,12,22,13,14,15};
302
+
303
+ int* a = pixecls_;
304
+
305
+
306
+
307
+ int main() {
308
+
309
+ typedef struct {
310
+
311
+ unsigned int r, g, b;
312
+
313
+ }RGB2;
314
+
315
+ RGB2* pixels2 = (RGB2*)malloc(sizeof RGB2 * 5 * 5);
316
+
317
+ pixels2->b = *a;
318
+
319
+ pixels2->g = *a;
320
+
321
+ pixels2->r = *a;
322
+
323
+
324
+
325
+ for (int i=0; i < 30;i++) {
326
+
327
+ printf("pixels->r:%d ,pixels->g:%d ,pixels->b:%d\n",
328
+
329
+ pixels->r+i, pixels->g+i, pixels->b+i);
330
+
331
+ }
332
+
333
+ return 0;
334
+
335
+ }
336
+
337
+ ```

4

誤字

2020/02/16 03:01

投稿

hikar
hikar

スコア13

test CHANGED
File without changes
test CHANGED
@@ -48,22 +48,22 @@
48
48
 
49
49
 
50
50
 
51
+ ・・・・・・・・・・・・・・・・・・・・3・・・・・・・・・・・・・・・・・・・・・
52
+
53
+ 2の質問と同じようになってしまいますが...
54
+
55
+ BITMAPINFOHEADER biをネットで調べてみた結果、色情報を格納すると記述されていました。
56
+
57
+ ん~上と一緒
58
+
59
+ また、BITMAPFILEHEADER bfはBITMAPINFOHEADER biを使用できるようにするための宣言と書いてある記事もありました。どうなのでしょうか?
60
+
61
+ どのように使って、何が格納されるのか教えてください<(_ _)>
62
+
63
+
64
+
51
65
  ・・・・・・・・・・・・・・・・・・・・5・・・・・・・・・・・・・・・・・・・・・
52
66
 
53
- 2の質問と同じようになってしまいますが...
54
-
55
- BITMAPINFOHEADER biをネットで調べてみた結果、色情報を格納すると記述されていました。
56
-
57
- ん~上と一緒
58
-
59
- また、BITMAPFILEHEADER bfはBITMAPINFOHEADER biを使用できるようにするための宣言と書いてある記事もありました。どうなのでしょうか?
60
-
61
- どのように使って、何が格納されるのか教えてください<(_ _)>
62
-
63
-
64
-
65
- ・・・・・・・・・・・・・・・・・・・・5・・・・・・・・・・・・・・・・・・・・・
66
-
67
67
  ```ここに言語を入力
68
68
 
69
69
  typedef struct {

3

文法の改善

2020/02/14 23:20

投稿

hikar
hikar

スコア13

test CHANGED
@@ -1 +1 @@
1
- OpenGLを使った2D画像描画方法(関数の仕様など)
1
+ OpenGLを使った2D画像描画方法
test CHANGED
File without changes

2

書式の改善

2020/02/14 14:17

投稿

hikar
hikar

スコア13

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
1
  Youtuberの「ゲーム道館」「OpenGL道場第19~20回」を参考にさせていただき、OpenGLを使った2D画像描画プログラムを製作しています
2
2
 
3
- ゲーム道館さんの動画はとても面白く、参考にさせていた抱いています。
3
+ ゲーム道館さんの動画はとても面白く、参考にさせていた抱いています。(>_<)
4
4
 
5
5
  その中で、少しわからなかったことがあったので質問させていただきました。
6
6
 

1

文法の改善

2020/02/13 14:05

投稿

hikar
hikar

スコア13

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,6 @@
1
- Youtuberの「ゲーム道館」「OpenGL道場第19~20回」を参考にさせていただき、OpenGLを使った2D画像描画プログラムを製作しています
1
+ Youtuberの「ゲーム道館」「OpenGL道場第19~20回」を参考にさせていただき、OpenGLを使った2D画像描画プログラムを製作しています
2
+
3
+ ゲーム道館さんの動画はとても面白く、参考にさせていた抱いています。
2
4
 
3
5
  その中で、少しわからなかったことがあったので質問させていただきました。
4
6
 
@@ -6,23 +8,125 @@
6
8
 
7
9
  まず、画像描画までの過程として、
8
10
 
9
- ・画像のファイルを開く(読み込み)
11
+ 1・画像のファイルを開く(読み込み)
10
-
12
+
11
- ・ビットマップファイルヘッダーを読み込む
13
+ 2・ビットマップファイルヘッダーを読み込む
12
-
14
+
13
- ・ビットマップインフォヘッダーを読み込む
15
+ 3・ビットマップインフォヘッダーを読み込む
14
-
16
+
15
- ・ポインタ型構造体(ピクセル情報)を生成し、全メンバを扱えるようにする。
17
+ 4・ポインタ型構造体(ピクセル情報)を生成し、全メンバを扱えるようにする。
16
-
18
+
17
- ・malloc関数を使用しピクセル数分のメモリを確保しポインタ型構造体に代入
19
+ 5・malloc関数を使用しピクセル数分のメモリを確保しポインタ型構造体に代入
20
+
18
-
21
+ 6・色情報を補正(変更)
22
+
19
- ・画像反転
23
+ 7・画像反転
20
-
21
- ・OpenGLを使用し色情報を補正(変更)
24
+
22
-
23
- ・OpenGLを使用し画像を描画
25
+ 8・OpenGLを使用し画像を描画
24
-
26
+
25
- ・メモリ開放
27
+ 9・メモリ開放
28
+
29
+
30
+
31
+ 2・3・5・8がわかりません。
32
+
33
+
34
+
35
+ ・・・・・・・・・・・・・・・・・・・・2・・・・・・・・・・・・・・・・・・・・・
36
+
37
+ 「BITMAPFILEHEADER bf」はヘッダーのデータを格納する構造体とゲーム道館館長さんがおっしゃっていました。
38
+
39
+ ビットマップ画像とは、ピクセルを用いたもの(座標と色)
40
+
41
+ ヘッダとはファイルなどの先頭にあるデータである。
42
+
43
+ コンピュータはデータを処理する際に、まずヘッダの情報を読み取り、そのデータを処理する方法を判断する。
44
+
45
+ これはfopen_sで読み込んだ画像データの色情報をBITMAPFILEHEADER bfを使い構造体に格納しているのでしょうか?
46
+
47
+
48
+
49
+
50
+
51
+ ・・・・・・・・・・・・・・・・・・・・5・・・・・・・・・・・・・・・・・・・・・
52
+
53
+ 2の質問と同じようになってしまいますが...
54
+
55
+ BITMAPINFOHEADER biをネットで調べてみた結果、色情報を格納すると記述されていました。
56
+
57
+ ん~上と一緒
58
+
59
+ また、BITMAPFILEHEADER bfはBITMAPINFOHEADER biを使用できるようにするための宣言と書いてある記事もありました。どうなのでしょうか?
60
+
61
+ どのように使って、何が格納されるのか教えてください<(_ _)>
62
+
63
+
64
+
65
+ ・・・・・・・・・・・・・・・・・・・・5・・・・・・・・・・・・・・・・・・・・・
66
+
67
+ ```ここに言語を入力
68
+
69
+ typedef struct {
70
+
71
+ unsigned char r, g, b;
72
+
73
+ }RGB;
74
+
75
+ RGB* pixels = (RGB*)malloc(sizeof RGB * bi.biWidth * bi.biHeight);
76
+
77
+ fread(pixels, //格納先のバファ
78
+
79
+ sizeof RGB, //読み込むデータ1つのバイト数
80
+
81
+ bi.biWidth* bi.biHeight,//読み込むデータの個数
82
+
83
+ pFile); //ファイルポインタ
84
+
85
+ ```
86
+
87
+ ポインタ構造体変数で全メンバを扱えるようmalloc関数を使用しメモリをピクセル数分確保する。まではわかるのですが。
88
+
89
+ その変数にfreadを使用しどのようなデータが格納され、どのようにpixelsにデータが格納されるのでしょうか?
90
+
91
+
92
+
93
+ 初めにfopen_sで読み込んだ画像情報の色情報を、pixelsに、一ピクセル3色分RGBのデータを画像分、格納する。と思ったのですが、そしたら2・3の意味がなくなってしまうのではないかな~と思いました。
94
+
95
+
96
+
97
+ そして、pixelsにはどのように格納されているのでしょうか?
98
+
99
+ ピクセルがRGBの3色分であり、1ピクセルにはRGBの順で色情報が並んでおり、それに伴い、pixelsのrgbに確保したメモリ分格納できる?
100
+
101
+ ![イメージ説明](cf2b5a2e463332a05d8c15e83c092b5a.png)
102
+
103
+ 画像が汚く本当にすみません。
104
+
105
+ マウスパッドで書いたから仕方が...
106
+
107
+
108
+
109
+ 構造体のポインタ変数があまりわからないのですが、なぜこんなにも多くのデータを配列でもないのにかくのうできるのでしょうか?
110
+
111
+ malloc関数を使用しメモリを確保しているからでしょうか?
112
+
113
+
114
+
115
+ ・・・・・・・・・・・・・・・・・・・・8・・・・・・・・・・・・・・・・・・・・・
116
+
117
+ 「glTexParameteri()」関数を使いテクスチャマッピングを行う際の種々のパラメータの設定を行うそうなのですが、下のソースコードを見て頂いたらわかると思うのですが、なぜglTexParameteri()関数を使いパラメータの設定をおこなうのでしょうか?
118
+
119
+ 2回目のglTexParameteri()をコメントにしたら画像が消えてしまいましたし...
120
+
121
+
122
+
123
+ ポインタ構造体変数はどのような構造をしていて、freadを使用しどのようなデータが格納され、どのようにpixelsにデータが格納されるのか教えてください<(_ _)>
124
+
125
+
126
+
127
+ 質問攻めになってしまいますが、どうかよろしくお願いします。<(_ _)>
128
+
129
+
26
130
 
27
131
  ```C++
28
132
 
@@ -56,7 +160,7 @@
56
160
 
57
161
  printf("%s opened.\n", _fileName);
58
162
 
59
-
163
+ *2*\
60
164
 
61
165
  BITMAPFILEHEADER bf; //ヘッダーのデータを格納する構造体
62
166
 
@@ -70,7 +174,7 @@
70
174
 
71
175
  printf("bfSize:%d\n", bf.bfSize);
72
176
 
73
-
177
+ /*3*/
74
178
 
75
179
  BITMAPINFOHEADER bi;
76
180
 
@@ -82,106 +186,108 @@
82
186
 
83
187
  pFile); //ファイルポインタ
84
188
 
189
+ /*5*/
190
+
191
+ typedef struct {
192
+
193
+ unsigned char r, g, b;
194
+
195
+ }RGB;
196
+
197
+ RGB* pixels = (RGB*)malloc(sizeof RGB * bi.biWidth * bi.biHeight);
198
+
199
+ fread(pixels, //格納先のバファ
200
+
201
+ sizeof RGB, //読み込むデータ1つのバイト数
202
+
203
+ bi.biWidth* bi.biHeight,//読み込むデータの個数
204
+
205
+ pFile); //ファイルポインタ
206
+
85
207
 
86
208
 
87
- typedef struct {
209
+ for (int y= 0; y < bi.biHeight; y++) {
210
+
88
-
211
+ for (int x = 0; x < bi.biWidth; x++) {
212
+
213
+ RGB* pPixel = &pixels[y * bi.biWidth + x];
214
+
89
- unsigned char r, g, b;
215
+ unsigned char temp = pPixel->r;
216
+
90
-
217
+ pPixel->r = pPixel->b;
218
+
219
+ pPixel->b = temp;
220
+
91
- }RGB;
221
+ }
222
+
92
-
223
+ }
224
+
225
+
226
+
227
+ for (int y = 0; y < bi.biHeight/2; y++)
228
+
229
+ for (int x = 0; x < bi.biWidth; x++) {
230
+
93
- RGB* pixels = (RGB*)malloc(sizeof RGB * bi.biWidth * bi.biHeight);
231
+ RGB* pPixel0 = &pixels[y * bi.biWidth + x];
94
-
232
+
95
- fread(pixels, //格納先のバファ
233
+ RGB* pPixel1 = &pixels[(bi.biHeight -1-y )*bi.biWidth +x];
234
+
96
-
235
+ RGB temp = *pPixel0;
236
+
237
+ *pPixel0 = *pPixel1;
238
+
239
+ *pPixel1 = temp;
240
+
241
+
242
+
243
+ }
244
+
245
+
246
+
247
+ glTexImage2D(
248
+
97
- sizeof RGB, //読み込むデータ1つのバイト数
249
+ GL_TEXTURE_2D, // GLenum target
250
+
98
-
251
+ 0, // GLint level
252
+
253
+ GL_RGB, // GLint internalformat
254
+
99
- bi.biWidth* bi.biHeight,//読み込むデータの個数
255
+ bi.biWidth,bi.biHeight, // GLsizei width, height
256
+
100
-
257
+ 0, // GLint border
258
+
259
+ GL_RGB, // GLenum format
260
+
261
+ GL_UNSIGNED_BYTE, // GLenum type
262
+
263
+ pixels); // const GLvoid *pixels
264
+
265
+ /*8*/
266
+
267
+ glTexParameteri(
268
+
269
+ GL_TEXTURE_2D, // GLenum target
270
+
271
+ GL_TEXTURE_MAG_FILTER, // GLenum pname
272
+
101
- pFile); //ファイルポインタ
273
+ GL_NEAREST); // GLint param
274
+
275
+ glTexParameteri(
276
+
277
+ GL_TEXTURE_2D, // GLenum target
278
+
279
+ GL_TEXTURE_MIN_FILTER, // GLenum pname
280
+
281
+ GL_NEAREST); // GLint param
282
+
283
+
284
+
285
+ free(pixels);
286
+
287
+ fclose(pFile);
102
288
 
103
289
 
104
290
 
105
- for (int y= 0; y < bi.biHeight; y++) {
106
-
107
- for (int x = 0; x < bi.biWidth; x++) {
108
-
109
- RGB* pPixel = &pixels[y * bi.biWidth + x];
110
-
111
- unsigned char temp = pPixel->r;
112
-
113
- pPixel->r = pPixel->b;
114
-
115
- pPixel->b = temp;
116
-
117
- }
118
-
119
- }
120
-
121
-
122
-
123
- for (int y = 0; y < bi.biHeight/2; y++)
124
-
125
- for (int x = 0; x < bi.biWidth; x++) {
126
-
127
- RGB* pPixel0 = &pixels[y * bi.biWidth + x];
128
-
129
- RGB* pPixel1 = &pixels[(bi.biHeight -1-y )*bi.biWidth +x];
130
-
131
- RGB temp = *pPixel0;
132
-
133
- *pPixel0 = *pPixel1;
134
-
135
- *pPixel1 = temp;
136
-
137
-
138
-
139
- }
140
-
141
-
142
-
143
- glTexImage2D(
144
-
145
- GL_TEXTURE_2D, // GLenum target
146
-
147
- 0, // GLint level
148
-
149
- GL_RGB, // GLint internalformat
150
-
151
- bi.biWidth,bi.biHeight, // GLsizei width, height
152
-
153
- 0, // GLint border
154
-
155
- GL_RGB, // GLenum format
156
-
157
- GL_UNSIGNED_BYTE, // GLenum type
158
-
159
- pixels); // const GLvoid *pixels
160
-
161
- glTexParameteri(
162
-
163
- GL_TEXTURE_2D, // GLenum target
164
-
165
- GL_TEXTURE_MAG_FILTER, // GLenum pname
166
-
167
- GL_NEAREST); // GLint param
168
-
169
- glTexParameteri(
170
-
171
- GL_TEXTURE_2D, // GLenum target
172
-
173
- GL_TEXTURE_MIN_FILTER, // GLenum pname
174
-
175
- GL_NEAREST); // GLint param
176
-
177
-
178
-
179
- free(pixels);
180
-
181
- fclose(pFile);
182
-
183
-
184
-
185
291
  return 0;
186
292
 
187
293
  }