Advertisement
Kojima0502

textureMAP_raw_texture_2

Jan 15th, 2014
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.84 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <GLUT/glut.h>
  4.  
  5.  
  6. /* 画像についての情報を保存しておく変数・定数 */
  7. #define  IMGFILE  "sample.raw"
  8. #define  CHANNEL  1  // 画像の色数(R, G, B)
  9. int width;           // 画像の幅
  10. int height;          // 画像の高さ
  11. GLuint texture;      // テクスチャの識別番号
  12. GLfloat* image;      // ビットマップ画像データを格納
  13.  
  14. /* 関数のプロトタイプ宣言 */
  15. void loadImage(const char* filepath, int widht, int height);  // BMP 画像を読み込む
  16.  
  17.  
  18. void display(void)
  19. {
  20.     glClear(GL_COLOR_BUFFER_BIT);//描画用のバッファをクリア
  21.     glClearColor (1.0, 1.0, 1.0, 1.0);//クリアする色を設定
  22.    
  23.     printf("check1¥n");
  24.     /* 画像の表示 */
  25.     glEnable(GL_TEXTURE_2D);//2次元テクスチャを有効にする
  26.     glBindTexture(GL_TEXTURE_2D, texture);
  27.     glBegin(GL_QUADS);//頂点リストの開始
  28.     glTexCoord2f(1.0, 0.0);  glVertex2f(1.0, 0.0);//テクスチャ座標の指定 右下
  29.     glTexCoord2f(1.0, 1.0);  glVertex2f(1.0, 1.0);//テクスチャ座標の指定 右上
  30.     glTexCoord2f(0.0, 1.0);  glVertex2f(0.0, 1.0);//テクスチャ座標の指定 左上
  31.     glTexCoord2f(0.0, 0.0);  glVertex2f(0.0, 0.0);//テクスチャ座標の指定 左下
  32.     glEnd();///頂点リストの終了
  33.     glDisable(GL_TEXTURE_2D);
  34.    
  35.     glutSwapBuffers();//バックバッファとフロントバッファを切り替える
  36. }
  37. //* 個々のプログラム独自に行なうべき初期化 *//
  38. void myInit(void)
  39. {
  40.     loadImage(IMGFILE,width,height);
  41.    
  42.     /* ウィンドウ生成前に行なうべき設定 */
  43.     glutInitWindowSize(800, 600);                  // ウィンドウサイズの設定
  44.     glutInitWindowPosition(200, 200);              // 表示位置の設定
  45.     glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);  // ディスプレイモードの設定
  46.     glutCreateWindow("OpenGL");                    // ウィンドウを生成
  47.     glClearColor (0.0, 0.0, 0.0, 1.0);             // ウィンドウの背景色
  48.    
  49.     printf("check2¥n");
  50.    
  51.     /* イベント発生時に呼び出される関数の登録 */
  52.     glutDisplayFunc(display);                      // 描画関数(自分自身で定義)を登録
  53.     /* テクスチャの作成 */
  54.    
  55.     glPixelStoref(GL_UNPACK_ALIGNMENT, 1);//メモリへの格納法が指定 整数値 glPixelStorei、浮動小数値 glPixelStoref
  56.     glGenTextures(GL_TEXTURE_2D, &texture);//テクスチャ・オブジェクトを生成
  57.     glBindTexture(GL_TEXTURE_2D, texture);//テクスチャをバインド
  58.     glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);//テクスチャを拡大、縮小した時のピクセルの補間方法を指定 テクスチャ拡張関数を設定
  59.     glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);//テクスチャ縮小関数を設定
  60.     glTexImage2D(GL_TEXTURE_2D, 1, GL_RGB16,
  61.                  width, height, 1, GL_RGB16,
  62.                  GL_FLOAT, image);
  63.     //過去に作られたテクスチャ・オブジェクトを再使用
  64.     free(image);
  65.    
  66.     printf("check3¥n");
  67.    
  68. }
  69. /* テクスチャを拡大・縮小する方法の指定 */
  70. int main(int argc, char* argv[])
  71.  
  72. {
  73.     /* 初期化 */
  74.    
  75.     width = atoi(argv[1]);
  76.     height = atoi(argv[2]);
  77.    
  78.     printf("check¥n");
  79.    
  80.     glutInit(&argc, argv);
  81.    
  82.     printf("check¥n");
  83.     myInit();
  84.    
  85.     /* イベント待機状態に入る */
  86.     glutMainLoop();
  87.    
  88.     return 0;
  89.     printf("check4¥n");
  90. }
  91.  
  92.  
  93. /* BMP画像の場所を引数にとり、image配列に画像データを格納していく */
  94. void loadImage(const char* filepath, int widht, int height)
  95. {
  96.     int i;
  97.     int size;  // 画像のサイズ(幅 * 高さ * 色数)
  98.     FILE* fp;
  99.    
  100.     /* ファイルの読込 */
  101.     fp = fopen("sample.raw", "rb");
  102.     if (fp == NULL)
  103.     {printf("check5¥n");
  104.         fprintf(stderr, "%sのロードに失敗\n", filepath);
  105.         exit(EXIT_FAILURE);
  106.         printf("check6¥n");
  107.     }
  108.    
  109.     /* 画像の幅, 高さを取得 */
  110.     //fseek(fp, 18, SEEK_SET);  // 画像の幅が格納されている場所までfpを移動
  111.     //fread(&width, 4, 1, fp);
  112.     //fread(&height, 4, 1, fp);
  113.    
  114.     /* 画像データの読み込み */
  115.     //fseek(fp, 54, SEEK_SET);  // 画像データが格納されている場所までfpを移動
  116.     size = width * height * CHANNEL;
  117.     image = (GLfloat* ) malloc(size);
  118.     if (image == NULL)
  119.     {
  120.         printf("check7¥n");
  121.         fprintf(stderr, "メモリ確保に失敗\n");
  122.         exit(EXIT_FAILURE);
  123.         printf("check8¥n");
  124.     }
  125.    
  126.     for (i = 0; i < size; ++i)
  127.         fread(&image[i], sizeof(GLubyte), 1, fp);
  128.     printf("check9¥n");
  129.     /* 作業が終わったのでファイルを閉じる */
  130.     fclose(fp);
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement