スポンサーリンク

GL_LUMINANCEの使い方復習

巷の例が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();
}

描画結果


コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: