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

質問編集履歴

4

画像の添付

2018/01/22 13:56

投稿

motyaa
motyaa

スコア12

title CHANGED
File without changes
body CHANGED
@@ -218,7 +218,7 @@
218
218
  ```
219
219
 
220
220
  ### 実行結果
221
- ![result.png](dee7e1d5e54cb610a21bb21a1b4e83fb.png)
221
+ ![result.png](df3d1b00cc41f84acb4786278216dfac.png)
222
222
 
223
223
  ###補足情報(言語/FW/ツール等のバージョンなど)
224
224
  C言語

3

2018/01/22 13:55

投稿

motyaa
motyaa

スコア12

title CHANGED
@@ -1,1 +1,1 @@
1
- OpenGLでストラクチャを実装しようとすると画像にノイズが入ります
1
+ OpenGLでチャを実装しようとすると画像にノイズが入ります
body CHANGED
File without changes

2

コード更新、実行結果の画像を添付

2018/01/22 08:49

投稿

motyaa
motyaa

スコア12

title CHANGED
@@ -1,1 +1,1 @@
1
- OpenGLでストラクチャを実装しようとすると実行時エラーりました
1
+ OpenGLでストラクチャを実装しようとすると画像ノイズが入りま
body CHANGED
@@ -1,14 +1,11 @@
1
1
  ###前提・実現したいこと
2
2
  OpenGLを使って簡単なCGを作っています。
3
3
  2つアニメーションを実装している立方体があるうち、中心の立方体の6面にストラクチャを貼ろうとしたところ、実行時エラーが発生しました。
4
+ 試しに、1つのポリゴンを表示するようにしているところです。
4
5
 
5
6
  ###発生している問題・エラーメッセージ
7
+ テクスチャの画像に下の実行結果のようなノイズが入ってしまう。
6
8
 
7
- ```
8
- % gcc -framework GLUT -framework OpenGL -mmacosx-version-min=10.8 -o out kadai1.c
9
- zsh: segmentation fault ./out
10
- ```
11
-
12
9
  ###該当のソースコード
13
10
  ```c
14
11
  #include <stdio.h>
@@ -29,7 +26,9 @@
29
26
  /* Texture */
30
27
  #define TEXWIDTH 256
31
28
  #define TEXHEIGHT 256
29
+ //#define TEXWIDTH 512
30
+ //#define TEXHEIGHT 512
32
- static const char texture1[] = "./motya.data";
31
+ static const char texture1[] = "./image01.data";
33
32
  //static const char texture2[] = "sample.data";
34
33
 
35
34
  void myKbd(unsigned char key,int x, int y){
@@ -40,36 +39,40 @@
40
39
  glEnable(GL_TEXTURE_2D);
41
40
  glNormal3d(0.0,0.0,1.0); //法線ベクトルの設定
42
41
  glBegin(GL_QUADS);
42
+ glTexCoord2d(0,1); glVertex3d(-1,-1,0); //左下
43
+ glTexCoord2d(1,1); glVertex3d(1,-1,0); //左上
44
+ glTexCoord2d(1,0); glVertex3d(1,1,0); //右上
45
+ glTexCoord2d(0,0); glVertex3d(-1,1,0); //右下
43
46
  //上面
44
- glTexCoord2d(0.0,0.5); glVertex3d(0.0,0.0,0.0); //左下
47
+ // glTexCoord2d(0.0,1); glVertex3d(0.0,0.0,0.0); //左下
45
- glTexCoord2d(0.0,0.0); glVertex3d(0,0,-0.5); //左上
48
+ // glTexCoord2d(0.0,0.0); glVertex3d(1,0.0,0); //左上
46
- glTexCoord2d(0.5,0.0); glVertex3d(0.5,0,-0.5); //右上
49
+ // glTexCoord2d(1,0.0); glVertex3d(1,0,-1); //右上
47
- glTexCoord2d(0.5,0.5); glVertex3d(0.5,0.0,0.0); //右下
50
+ // glTexCoord2d(1,1); glVertex3d(0,0.0,-1); //右下
48
51
  //底面
49
- glTexCoord2d(0.0,0.5); glVertex3d(0,-0.5,0); //左下
52
+ // glTexCoord2d(0.0,0.5); glVertex3d(0,-0.5,0); //左下
50
- glTexCoord2d(0.0,0.0); glVertex3d(0,-0.5,-0.5); //左上
53
+ // glTexCoord2d(0.0,0.0); glVertex3d(0,-0.5,-0.5); //左上
51
- glTexCoord2d(0.5,0.0); glVertex3d(0.5,-0.5,-0.5); //右上
54
+ // glTexCoord2d(0.5,0.0); glVertex3d(0.5,-0.5,-0.5); //右上
52
- glTexCoord2d(0.5,0.5); glVertex3d(0.5,-0.5,0.0); //右下
55
+ // glTexCoord2d(0.5,0.5); glVertex3d(0.5,-0.5,0.0); //右下
53
- //左側
56
+ // //左側
54
- glTexCoord2d(0.0,0.5); glVertex3d(0.0,-0.5,0.0); //左下
57
+ // glTexCoord2d(0.0,0.5); glVertex3d(0.0,-0.5,0.0); //左下
55
- glTexCoord2d(0.0,0.0); glVertex3d(0.0,0.0,0.0); //左上
58
+ // glTexCoord2d(0.0,0.0); glVertex3d(0.0,0.0,0.0); //左上
56
- glTexCoord2d(0.5,0.0); glVertex3d(0.0,0.0,-0.5); //右上
59
+ // glTexCoord2d(0.5,0.0); glVertex3d(0.0,0.0,-0.5); //右上
57
- glTexCoord2d(0.5,0.5); glVertex3d(0.0,-0.5,-0.5); //右下
60
+ // glTexCoord2d(0.5,0.5); glVertex3d(0.0,-0.5,-0.5); //右下
58
- //奥側
61
+ // //奥側
59
- glTexCoord2d(0.0,0.5); glVertex3d(0.0,-0.5,-0.5); //左下
62
+ // glTexCoord2d(0.0,0.5); glVertex3d(0.0,-0.5,-0.5); //左下
60
- glTexCoord2d(0.0,0.0); glVertex3d(0.0,0.0,-0.5); //左上
63
+ // glTexCoord2d(0.0,0.0); glVertex3d(0.0,0.0,-0.5); //左上
61
- glTexCoord2d(0.5,0.0); glVertex3d(0.5,0.0,-0.5); //右上
64
+ // glTexCoord2d(0.5,0.0); glVertex3d(0.5,0.0,-0.5); //右上
62
- glTexCoord2d(0.5,0.5); glVertex3d(0.5,-0.5,-0.5); //右下
65
+ // glTexCoord2d(0.5,0.5); glVertex3d(0.5,-0.5,-0.5); //右下
63
- //右側
66
+ // //右側
64
- glTexCoord2d(0.0,0.5); glVertex3d(0.5,-0.5,0.0); //左下
67
+ // glTexCoord2d(0.0,0.5); glVertex3d(0.5,-0.5,0.0); //左下
65
- glTexCoord2d(0.0,0.0); glVertex3d(0.5,0.0,0.0); //左上
68
+ // glTexCoord2d(0.0,0.0); glVertex3d(0.5,0.0,0.0); //左上
66
- glTexCoord2d(0.5,0.0); glVertex3d(0.5,0,-0.5); //右上
69
+ // glTexCoord2d(0.5,0.0); glVertex3d(0.5,0,-0.5); //右上
67
- glTexCoord2d(0.5,0.5); glVertex3d(0.5,-0.5,-0.5); //右下
70
+ // glTexCoord2d(0.5,0.5); glVertex3d(0.5,-0.5,-0.5); //右下
68
- //手前側
71
+ // //手前側
69
- glTexCoord2d(0.0,0.5); glVertex3d(0.0,-0.5,0.0); //左下
72
+ // glTexCoord2d(0.0,0.5); glVertex3d(0.0,-0.5,0.0); //左下
70
- glTexCoord2d(0.0,0.0); glVertex3d(0.0,0.0,0.0); //左上
73
+ // glTexCoord2d(0.0,0.0); glVertex3d(0.0,0.0,0.0); //左上
71
- glTexCoord2d(0.5,0.0); glVertex3d(0.5,0.0,0.0); //右上
74
+ // glTexCoord2d(0.5,0.0); glVertex3d(0.5,0.0,0.0); //右上
72
- glTexCoord2d(0.5,0.5); glVertex3d(0.5,-0.5,0.0); //右下
75
+ // glTexCoord2d(0.5,0.5); glVertex3d(0.5,-0.5,0.0); //右下
73
76
  glEnd();
74
77
  glDisable(GL_TEXTURE_2D);
75
78
  // --------- テクスチャマッピング終了 -------------
@@ -87,7 +90,6 @@
87
90
  0.0, 1.0, 0.0); // 画像のどこが上なのかを指定(ベクトル)
88
91
  glColor4f(0.0,0.0,0.0,1.0);
89
92
 
90
- texture_map();
91
93
  // --------- 外側の直方体 回転 ------------------
92
94
  glPushMatrix(); //現在の座標系を保存
93
95
  glRotatef(45.0*(float)param_big,1.0,0.0,0.0); //座標系をy軸周りに(45 × i)度回転
@@ -99,6 +101,7 @@
99
101
  //課題2
100
102
  glPushMatrix(); //現在の座標系を保存
101
103
  glRotatef(-45.0*(float)param_big,1.0,0.0,0.0); //座標系をy軸周りに(45 × i)度回転
104
+ // --------------------------------------------
102
105
 
103
106
  //立方体の描画(外側)
104
107
  glLineWidth(2.0);
@@ -117,6 +120,7 @@
117
120
  glMaterialfv(GL_FRONT,GL_SPECULAR,specular);
118
121
  glMaterialfv(GL_FRONT,GL_AMBIENT,ambient);
119
122
  glMaterialf(GL_FRONT,GL_SHININESS,shininess);
123
+
120
124
 
121
125
  // ------ 中心の直方体 回転 -----------
122
126
  glPushMatrix(); //現在の座標系を保存
@@ -124,12 +128,13 @@
124
128
 
125
129
 
126
130
  glPushMatrix(); //回転した状態の座標系を保存
127
- glTranslatef(0.0,0.0,-1.0); //座標系を平行移動
131
+ glTranslatef(0.0,0.0,-1.0); //座標系を平行移動
128
132
 
129
- //課題2
130
133
  glPushMatrix(); //現在の座標系を保存
131
134
  glRotatef(45.0*(float)param_small,1.0,0.0,0.0); //座標系をy軸周りに(45 × i)度回転
132
135
  // ----------------------------
136
+
137
+ texture_map();
133
138
 
134
139
  glPopMatrix(); //平行移動前の座標系を復元
135
140
  glPopMatrix(); //平行移動も回転もしていない元の座標系を復元
@@ -158,29 +163,6 @@
158
163
  }
159
164
  }
160
165
  void init(char *progname){ //初期化関数
161
-
162
- //テクスチャ画像の読み込み
163
- GLubyte texture[TEXHEIGHT][TEXWIDTH][3];
164
- FILE *fp;
165
- if((fp=fopen(texture1,"rb")) != NULL){
166
- fread(texture, sizeof texture, 1,fp);
167
- fclose(fp);
168
- }else{
169
- // 任意のエラー処理を記述
170
- printf("texture not founed");
171
- }
172
-
173
- glPixelStorei(GL_UNPACK_ALIGNMENT,1); //アライメント(データの格納方法)の設定
174
- glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,TEXWIDTH,TEXHEIGHT,0,GL_RGB,
175
- GL_UNSIGNED_BYTE, texture); //画像データをテクスチャメモリにセットする
176
-
177
- //テクスチャパラメータの設定(テクスチャマッピングの拡大・縮小法の設定)
178
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
179
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
180
-
181
- //テクスチャの合成環境の設定(ポリゴンの陰影等をテクスチャに反映する等の設定)
182
- glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);
183
-
184
166
  int width = 500, height = 500;
185
167
 
186
168
  glutInitWindowPosition(0,0);
@@ -188,8 +170,30 @@
188
170
  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); //デプスバッファの設定(隠面消去のため)
189
171
  glutCreateWindow(progname);
190
172
  glClearColor(1.0,1.0,1.0,1.0);
173
+
174
+ //テクスチャ画像の読み込み
175
+ GLubyte texture[TEXHEIGHT][TEXWIDTH][3];
176
+ FILE *fp;
177
+ if((fp=fopen("./image01.data","rb")) != NULL){
178
+ fread(texture, sizeof texture, 1,fp);
179
+ fclose(fp);
180
+ }else{
181
+ // 任意のエラー処理を記述
182
+ perror(texture1);
191
183
  }
184
+ glPixelStorei(GL_UNPACK_ALIGNMENT,1); //アライメント(データの格納方法)の設定
192
185
 
186
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, TEXWIDTH, TEXHEIGHT, 0,
187
+ GL_RGB, GL_UNSIGNED_BYTE, texture); //画像データをテクスチャメモリにセットする
188
+
189
+ //テクスチャパラメータの設定(テクスチャマッピングの拡大・縮小法の設定)
190
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
191
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
192
+
193
+ //テクスチャの合成環境の設定(ポリゴンの陰影等をテクスチャに反映する等の設定)
194
+ glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);
195
+ }
196
+
193
197
  void idle(void){
194
198
  param_big +=0.1;
195
199
  param_small += 0.05;
@@ -198,6 +202,7 @@
198
202
 
199
203
  int main(int argc,char *argv[]){ //メイン関数
200
204
  glutInit(&argc,argv);
205
+
201
206
  init(argv[0]);
202
207
  glutReshapeFunc(myReshape);
203
208
  glutDisplayFunc(display);
@@ -209,12 +214,11 @@
209
214
 
210
215
  return 0;
211
216
  }
217
+
212
218
  ```
213
219
 
214
- ###試したこと
220
+ ### 実行結果
215
- glTexCoord2d(x,y,z);
216
- この部分は異なった面毎に座標を変えなければならないのでしょうか?
221
+ ![result.png](dee7e1d5e54cb610a21bb21a1b4e83fb.png)
217
- この関数の理解が出来ておりません。
218
222
 
219
223
  ###補足情報(言語/FW/ツール等のバージョンなど)
220
224
  C言語

1

情報追記

2018/01/22 08:20

投稿

motyaa
motyaa

スコア12

title CHANGED
File without changes
body CHANGED
@@ -44,7 +44,7 @@
44
44
  glTexCoord2d(0.0,0.5); glVertex3d(0.0,0.0,0.0); //左下
45
45
  glTexCoord2d(0.0,0.0); glVertex3d(0,0,-0.5); //左上
46
46
  glTexCoord2d(0.5,0.0); glVertex3d(0.5,0,-0.5); //右上
47
- glTexCoord2d(0.5,0.5); glVertex3d(0.5,0,0); //右下
47
+ glTexCoord2d(0.5,0.5); glVertex3d(0.5,0.0,0.0); //右下
48
48
  //底面
49
49
  glTexCoord2d(0.0,0.5); glVertex3d(0,-0.5,0); //左下
50
50
  glTexCoord2d(0.0,0.0); glVertex3d(0,-0.5,-0.5); //左上
@@ -212,7 +212,9 @@
212
212
  ```
213
213
 
214
214
  ###試したこと
215
+ glTexCoord2d(x,y,z);
215
- 6面の座標は図書いて正確に書いたので正確はずなのですが、、
216
+ 部分は異なった面毎に座標を変えければらないのでしょうか?
217
+ この関数の理解が出来ておりません。
216
218
 
217
219
  ###補足情報(言語/FW/ツール等のバージョンなど)
218
220
  C言語