巷の例がGL_RGBかGL_RGBAばかりなのでGL_LUMINACEを使った例を置いておく。
typedef GLubyte gray_t; //テクスチャ用 typedef GLfloat points_t[3]; //モデルの座標用 typedef GLfloat texcoord_t[2];//テクスチャ座標用 const int P_COUNT = 4; //頂点データ GLuint vertexbuffer; points_t position[P_COUNT]; //テクスチャ座標データ texcoord_t texcoord[P_COUNT]; GLuint texcoordbuffer; //テクスチャデータ gray_t texdata[P_COUNT]; GLuint textureID; ////////////////////////////////////////////////// void prepare_buffers() { //テクスチャ(画像)作成 // 2*2の画像 texdata[0] = 255; texdata[1] = 128; texdata[2] = 50; texdata[3] = 0; ////////////////////////////////////////// ////////////////////////////////////////// //頂点座標の定義 (四角形) position[0][0] = -0.7; position[0][1] = 0.7; position[0][2] = 0; position[1][0] = -0.7; position[1][1] = -0.7; position[1][2] = 0; position[2][0] = 0.7; position[2][1] = -0.7; position[2][2] = 0; position[3][0] = +0.7; position[3][1] = +0.7; position[3][2] = 0; ////////////////////////////////////////// ////////////////////////////////////////// //テクスチャ座標の定義 texcoord[0][0] = 0; texcoord[0][1] = 1; texcoord[1][0] = 0; texcoord[1][1] = 0; texcoord[2][0] = 1; texcoord[2][1] = 0; texcoord[3][0] = 1; texcoord[3][1] = 1; ////////////////////////////////////////// ////////////////////////////////////////// //テクスチャの作成 // 普通のテクスチャ作成 glGenTextures(1, &textureID); glBindTexture(GL_TEXTURE_2D, textureID); int TEXWIDTH = 2; // 2*2の画素数 int TEXHEIGHT = 2; glPixelStorei(GL_UNPACK_ALIGNMENT, 1); // テクスチャの割り当て glTexImage2D(
GL_TEXTURE_2D,
0,
GL_LUMINANCE,
TEXWIDTH,
TEXHEIGHT,
0, GL_LUMINANCE,
GL_UNSIGNED_BYTE,
texdata
); // テクスチャを拡大・縮小する方法の指定 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); }
void display(void) { glClearColor(0, 0, 0, 1); glClear(GL_COLOR_BUFFER_BIT); glDisable(GL_CULL_FACE);//カリングを無効にする /////////////////////////////////// // 行列の設定 glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(65, 1, 0.1, 10); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslated(0.0, 0.0, -3); /////////////////////////////////// // 四角形の描画 glEnable(GL_TEXTURE_2D); glBegin(GL_TRIANGLE_FAN); glTexCoord2fv(texcoord[0]); glVertex3fv(position[0]); glTexCoord2fv(texcoord[1]); glVertex3fv(position[1]); glTexCoord2fv(texcoord[2]); glVertex3fv(position[2]); glTexCoord2fv(texcoord[3]); glVertex3fv(position[3]); glEnd(); glFlush(); }