Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <GLUT/glut.h>
- /* 画像についての情報を保存しておく変数・定数 */
- #define IMGFILE "sample.raw"
- #define CHANNEL 1 // 画像の色数(R, G, B)
- int width; // 画像の幅
- int height; // 画像の高さ
- GLuint texture; // テクスチャの識別番号
- GLfloat* image; // ビットマップ画像データを格納
- /* 関数のプロトタイプ宣言 */
- void loadImage(const char* filepath, int widht, int height); // BMP 画像を読み込む
- void display(void)
- {
- glClear(GL_COLOR_BUFFER_BIT);//描画用のバッファをクリア
- glClearColor (1.0, 1.0, 1.0, 1.0);//クリアする色を設定
- printf("check1¥n");
- /* 画像の表示 */
- glEnable(GL_TEXTURE_2D);//2次元テクスチャを有効にする
- glBindTexture(GL_TEXTURE_2D, texture);
- glBegin(GL_QUADS);//頂点リストの開始
- glTexCoord2f(1.0, 0.0); glVertex2f(1.0, 0.0);//テクスチャ座標の指定 右下
- glTexCoord2f(1.0, 1.0); glVertex2f(1.0, 1.0);//テクスチャ座標の指定 右上
- glTexCoord2f(0.0, 1.0); glVertex2f(0.0, 1.0);//テクスチャ座標の指定 左上
- glTexCoord2f(0.0, 0.0); glVertex2f(0.0, 0.0);//テクスチャ座標の指定 左下
- glEnd();///頂点リストの終了
- glDisable(GL_TEXTURE_2D);
- glutSwapBuffers();//バックバッファとフロントバッファを切り替える
- }
- //* 個々のプログラム独自に行なうべき初期化 *//
- void myInit(void)
- {
- loadImage(IMGFILE,width,height);
- /* ウィンドウ生成前に行なうべき設定 */
- glutInitWindowSize(800, 600); // ウィンドウサイズの設定
- glutInitWindowPosition(200, 200); // 表示位置の設定
- glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); // ディスプレイモードの設定
- glutCreateWindow("OpenGL"); // ウィンドウを生成
- glClearColor (0.0, 0.0, 0.0, 1.0); // ウィンドウの背景色
- printf("check2¥n");
- /* イベント発生時に呼び出される関数の登録 */
- glutDisplayFunc(display); // 描画関数(自分自身で定義)を登録
- /* テクスチャの作成 */
- glPixelStoref(GL_UNPACK_ALIGNMENT, 1);//メモリへの格納法が指定 整数値 glPixelStorei、浮動小数値 glPixelStoref
- glGenTextures(GL_TEXTURE_2D, &texture);//テクスチャ・オブジェクトを生成
- glBindTexture(GL_TEXTURE_2D, texture);//テクスチャをバインド
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);//テクスチャを拡大、縮小した時のピクセルの補間方法を指定 テクスチャ拡張関数を設定
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);//テクスチャ縮小関数を設定
- glTexImage2D(GL_TEXTURE_2D, 1, GL_RGB16,
- width, height, 1, GL_RGB16,
- GL_FLOAT, image);
- //過去に作られたテクスチャ・オブジェクトを再使用
- free(image);
- printf("check3¥n");
- }
- /* テクスチャを拡大・縮小する方法の指定 */
- int main(int argc, char* argv[])
- {
- /* 初期化 */
- width = atoi(argv[1]);
- height = atoi(argv[2]);
- printf("check¥n");
- glutInit(&argc, argv);
- printf("check¥n");
- myInit();
- /* イベント待機状態に入る */
- glutMainLoop();
- return 0;
- printf("check4¥n");
- }
- /* BMP画像の場所を引数にとり、image配列に画像データを格納していく */
- void loadImage(const char* filepath, int widht, int height)
- {
- int i;
- int size; // 画像のサイズ(幅 * 高さ * 色数)
- FILE* fp;
- /* ファイルの読込 */
- fp = fopen("sample.raw", "rb");
- if (fp == NULL)
- {printf("check5¥n");
- fprintf(stderr, "%sのロードに失敗\n", filepath);
- exit(EXIT_FAILURE);
- printf("check6¥n");
- }
- /* 画像の幅, 高さを取得 */
- //fseek(fp, 18, SEEK_SET); // 画像の幅が格納されている場所までfpを移動
- //fread(&width, 4, 1, fp);
- //fread(&height, 4, 1, fp);
- /* 画像データの読み込み */
- //fseek(fp, 54, SEEK_SET); // 画像データが格納されている場所までfpを移動
- size = width * height * CHANNEL;
- image = (GLfloat* ) malloc(size);
- if (image == NULL)
- {
- printf("check7¥n");
- fprintf(stderr, "メモリ確保に失敗\n");
- exit(EXIT_FAILURE);
- printf("check8¥n");
- }
- for (i = 0; i < size; ++i)
- fread(&image[i], sizeof(GLubyte), 1, fp);
- printf("check9¥n");
- /* 作業が終わったのでファイルを閉じる */
- fclose(fp);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement