テクスチャの読み込み
ここでは、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
- ClamAVのアップデート
- Smartyも入れてみる
- etchでPHP4->PHP5
- etchでのSamba設定
- etchでのメール設定
- 玄箱HGのetch化
- Webdruidでログ解析
- PEARも入れてみる
- 玄箱WEBのUTF-8化
- phpMyAdminでMySQL
- postmasterの変更
- ウィルスメール対策
- SPAMメール対策
- メールサーバ(IMAP)
- メールサーバ(Postfix)
- 猫にXOOPS
- PHPも入れてみる
- MySQLを入れてみる
- Subversion導入
- WebDav導入
- Apacheのrewrite機能
- Apacheディレクトリ設定
- Apache1.3->2.0
- ddclientの設定
- 静かな玄箱
- ユーザ追加
ホームページ
日記
Copyright (C) 2007 Arakin , All rights reserved.