TOTAL:209, TODAY:180

テクスチャの読み込み

ここでは、BMPファイルから画像を読み込み、テクスチャとして三角形に張るプログラムを紹介します。 BMPファイルのデータ構造は次のような構造体からなっています。

/* ファイルヘッダ */
typedef struct _tmpBMPFileHeader {
    unsigned short bfType;      /* ファイルタイプ */
    unsigned int bfSize;        /* ファイルサイズ */
    unsigned short bfReserved1; /* 予約領域 */
    unsigned short bfReserved2; /* 予約領域 */
    unsigned int bfOffBits;     /* 先頭から画像データまでのオフセット */
} BMPFileHeader;

/* BMP情報ヘッダ */
typedef struct _tmpBMPInfoHeader {
    unsigned int biSize;        /* 情報ヘッダーのサイズ */
    int biWidth;                /* 幅 */
    int biHeight;               /* 高さ(正ならば下から上、負は逆) */
    unsigned short biPlanes;    /* プレーン数(常に1) */
    unsigned short biBitCount;  /* 1画素分のビット数(1,4,8,24,32) */
    unsigned int biCompression;
    unsigned int biSizeImage;
    int biXPelsPerMeter;
    int biYPelsPerMeter;
    unsigned int biClrUsed;     /* パレットの色数 */
    unsigned int biClrImportant;
} BMPInfoHeader;

/* パレットデータ */
typedef struct _tmpRGBQuad {
    unsigned char rgbBlue;
    unsigned char rgbGreen;
    unsigned char rgbRed;
    unsigned char rgbReserved;
} RGBQuad;

先頭にファイルヘッダーがあり、その直後にBMP情報ヘッダーがあります。そして、1画素当たりのビット数が1,4,8の場合は、パレットデータが続きます。実際の画像データは、ファイル先頭からのオフセットとして、ファイルヘッダーのbfOffBitsが示す位置に格納されています。今回は、8ビット、24ビット、32ビットのBMPファイルを読み込むことができるようにしました。
OpenGLでの画像(テクスチャ)の貼り付けは、次のようにします。

    /* 頂点テクスチャ座標 */
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    glTexCoordPointer(2, GL_FLOAT, 0, triUV);

    /* テクスチャのバインド */
    glBindTexture(GL_TEXTURE_2D, textureID);

    /* 独立三角形描画 */
    glDrawArrays(GL_TRIANGLES, 0, 3);

3Dでは、通常、画像サイズは幅・高さとも2のべき乗でなければいけません。2のべき乗でない画像を貼り付ける方法は、またいつか紹介したいと思いますが、とりあえず、2のべき乗にしておいてください。プログラムをコンパイルすれば、次のような絵がでると思います。

サンプルで使用しているBMPファイルは、GIMP2.2で作成しました。フリーの画像編集ソフトで、Photoshop並みの機能を備えた優れものです(2.0は少し不安定なので、2.2を使うことをお勧めします)。GIMP以外にも、pictBearというフリーのソフトもあります。このソフトもかなり高機能です。両方とも非常に素晴らしいソフトです。

最新の7件

OpenGL

電子工作

玄箱HG

ホームページ

日記

Copyright (C) 2007 Arakin , All rights reserved.