質問編集履歴
4
画像の添付
title
CHANGED
File without changes
|
body
CHANGED
@@ -218,7 +218,7 @@
|
|
218
218
|
```
|
219
219
|
|
220
220
|
### 実行結果
|
221
|
-

|
222
222
|
|
223
223
|
###補足情報(言語/FW/ツール等のバージョンなど)
|
224
224
|
C言語
|
3
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
OpenGLで
|
1
|
+
OpenGLでテクスチャを実装しようとすると画像にノイズが入ります
|
body
CHANGED
File without changes
|
2
コード更新、実行結果の画像を添付
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[] = "./
|
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,
|
47
|
+
// glTexCoord2d(0.0,1); glVertex3d(0.0,0.0,0.0); //左下
|
45
|
-
glTexCoord2d(0.0,0.0); glVertex3d(
|
48
|
+
// glTexCoord2d(0.0,0.0); glVertex3d(1,0.0,0); //左上
|
46
|
-
glTexCoord2d(
|
49
|
+
// glTexCoord2d(1,0.0); glVertex3d(1,0,-1); //右上
|
47
|
-
glTexCoord2d(
|
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
|
+

|
217
|
-
この関数の理解が出来ておりません。
|
218
222
|
|
219
223
|
###補足情報(言語/FW/ツール等のバージョンなど)
|
220
224
|
C言語
|
1
情報追記
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
|
-
|
216
|
+
この部分は異なった面毎に座標を変えなければならないのでしょうか?
|
217
|
+
この関数の理解が出来ておりません。
|
216
218
|
|
217
219
|
###補足情報(言語/FW/ツール等のバージョンなど)
|
218
220
|
C言語
|