【OpenGL】テクスチャマッピングについて

公開日: : 最終更新日:2014/08/14 OpenGL

スポンサーリンク

OpenGL(GLUT)におけるテクスチャマッピングについての簡単な調査。まずテクスチャマッピングを行うには画像を読み込んで張り付ける必要があります。

ここでは

①画像の読み込み
②画像の貼り付け

について簡単にまとめます。

画像の読み込み

まずは画像の読み込みですが、OpenGLでは画像の読み込み関数などは存在しないようなので、自分でbmpなどの読み込み関数を作成するか、OpenCVなどの他のライブラリと併用することが必要となります。ここでは読みこみそのものには触れませんが、いずれについてもGoogleで検索をかければ解決法がいくつかでてきます。

それで画像を読み込んで具体的何がほしいのかというと

・画像の縦・横のサイズ(いずれもint)
・画像データの配列(通常unsigned char*)

の2つとなります。一般的には画像の各画素には256階調(8ビット(unsigned char))のデータRGBの3つが入っているため、画像データの配列サイズは

sizeof(unsigned char)×(画像の横サイズ)×(画像の縦サイズ)×3

ということになります。場合によってはRGBだけでなく不透明度を表すアルファ値を足して4つ必要になる時もあります。

そして画像データをOpenGL側のバッファに渡してやれば画像ハンドル(番号)が返ってきますので実際に描画するときはその値を記録しておきます。この際に使用するGLの関数は

glGenTextures
glBindTexture
gluBuild2DMipmaps(もしくはglTexImage2D)

の3つとなります。

ここまでを関数としてまとめると↓のようになります。
tex-1.png

「ここで画像を読み込む」の位置で画像サイズ、データ配列の中身を埋めます。その後、glGenTexturesで1枚の画像を指定して、glBindTextureで画像を指定、gluBuild2DMipmapsで画像を渡します。そして最後不要になったが王データを解放します。この例ではfreeで解放していますが、それぞれの解放方法で解放してください。

画像の貼り付け

テクスチャマッピングの手法はいくつかあります。

・UVマッピング

UVmap
指定の3D座標に、指定のテクスチャ座標の画像を張り付ける。

・投影マッピング

投影2-1
指定の位置から物体に対して画像を投影するように張り付ける。

・スフィアマッピング

sp2-1.png
球状に画像を張り付ける。

…などいくつか種類があるようです。

基本的には

glEnable(GL_TEXTURE_2D)

で画像の貼り付けを有効にして、使用する画像を

glBindTexture(GL_TEXTURE_2D,tex)

で指定します。(第2引数に先ほど取得した画像ハンドルを渡す。)

そして、UVマッピングではglVertex3*で頂点を指定する前にglCoord2*でそこに対応させるテクスチャ座標を選択します。そうすることで画像が面に張り付けられます。

ちなみにテクスチャ座標は画像の縦サイズと横サイズが0~1.0に正規化された座標系です。

uvcoord.png

次に、投影マッピングでは描画の際のパラメータを

glTexGeni
glTexGenfv

の2つで指定する必要があります。(詳細は省きます)
そして、物体を描画する前に画像の投影位置を指定します。(しなくてもできなくはない)

glMatrixMode(GL_TEXTURE);
glLoadIdentity();
gluPerspective(30.0, 1.0, 1.0, 100.0);
gluLookAt(1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);

これは(1.0 ,1.0 ,1.0)の点から原点に向かって画像を物体に対して投影しています。
そして物体の描画を

glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
glEnable(GL_TEXTURE_GEN_R);
glEnable(GL_TEXTURE_GEN_Q);

~ここで物体を描画~

glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glDisable(GL_TEXTURE_GEN_R);
glDisable(GL_TEXTURE_GEN_Q);

ではさむと投影マッピングできます。
スフィアマッピングについては完全に以下のサイトのままなので省きます。非常に参考になるサイトです。

スポンサーリンク
  • このエントリーをはてなブックマークに追加

関連記事

WordPressサイトのSSL対応(HTTPS化)手順のまとめ【さくらサーバー】

先週頃にこのサイトをSSL対応しましたのでその流れについてまとめておき

【Google Charts】動的にグラフを更新する方法

はじめに Webサイト上でグラフを描こうと思った場合、いくつかのJa

体重変化量計算シミュレータ【ダイエット/肥満】

ツール本体 入力 カロリー入力 1日の余剰摂取/消費カロリー

おサイフケータイ対応ストレージ32GBのSIMフリースマホまとめ【2017年秋版】

はじめに SIMフリーの格安スマホのおサイフケータイ機能付きのもので

リクルート期間限定ポイントの有効な使い道

はじめに  先日クレジットカードの見直し活動の一環でポイント還元率の

初心者がお金を貯めるための節約・財テク手法まとめ【ポイント還元・投資・税金対策】

はじめに  最近なるべく節約しようと思い、お金周りに関して色々調べて

動画講座を効率的にキャプチャして復習する方法

はじめに  最近、動画媒体の講座などをたまに視聴しています。独学だと

→もっと見る

  • Author : ががんぼ
    プログラミングやWeb関係で気付いたことについてメモしていく予定。だいたいが備忘録ですが、自分でサンプルを作って動かしてみたりしています。
PAGE TOP ↑