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 "depth_0010-01_RGB.bmp"
- #define CHANNEL 3 // 画像の色数(R, G, B)
- int width; // 画像の幅
- int height; // 画像の高さ
- GLuint texture; // テクスチャの識別番号
- GLubyte* image; // ビットマップ画像データを格納
- /* 関数のプロトタイプ宣言 */
- void loadImage(const char* filepath); // BMP 画像を読み込む
- void display(void)
- {
- glClear(GL_COLOR_BUFFER_BIT);
- /* 画像の表示 */
- glEnable(GL_TEXTURE_2D);
- 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)
- {
- /* ウィンドウ生成前に行なうべき設定 */
- glutInitWindowSize(800, 600); // ウィンドウサイズの設定
- glutInitWindowPosition(200, 200); // 表示位置の設定
- glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); // ディスプレイモードの設定
- glutCreateWindow("OpenGL"); // ウィンドウを生成
- glClearColor (0.0, 0.0, 0.0, 1.0); // ウィンドウの背景色
- /* イベント発生時に呼び出される関数の登録 */
- glutDisplayFunc(display); // 描画関数(自分自身で定義)を登録
- /* テクスチャの作成 */
- loadImage(IMGFILE);
- glPixelStorei(GL_UNPACK_ALIGNMENT, 8);
- glGenTextures(1, &texture);
- glBindTexture(GL_TEXTURE_2D, texture);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB,
- width, height, 0, GL_RGB,
- GL_UNSIGNED_BYTE, image);
- free(image);
- }
- int main(int argc, char* argv[])
- {
- /* 初期化 */
- glutInit(&argc, argv);
- myInit();
- /* イベント待機状態に入る */
- glutMainLoop();
- return 0;
- }
- /* BMP画像の場所を引数にとり、image配列に画像データを格納していく */
- void loadImage(const char* filepath)
- {
- int i;
- int size; // 画像のサイズ(幅 * 高さ * 色数)
- FILE* fp;
- /* ファイルの読込 */
- fp = fopen(filepath, "rb");
- if (fp == NULL)
- {
- fprintf(stderr, "%sのロードに失敗\n", filepath);
- exit(EXIT_FAILURE);
- }
- /* 画像の幅, 高さを取得 */
- 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 = (GLubyte* ) malloc(size);
- if (image == NULL)
- {
- fprintf(stderr, "メモリ確保に失敗\n");
- exit(EXIT_FAILURE);
- }
- for (i = 0; i < size; ++i)
- fread(&image[i], sizeof(GLubyte), 1, fp);
- /* 作業が終わったのでファイルを閉じる */
- fclose(fp);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement