読者です 読者をやめる 読者になる 読者になる

自習室

こもります

OpenGL テクスチャの貼り方いろいろ

.C++ .OpenGL

cvLoadImage() などOpenCV関数を利用する方法

http://wiki.livedoor.jp/mikk_ni3_92/d/OpenCV%a4%c7%c6%c9%a4%df%b9%fe%a4%e0

開発環境によるようですが、 glTexImage2D() やgluBuild2DMipMaps() での画像のデータ格納法指定で GL_BGRやGL_BGRAが怒られる場合があります。(visual c++)では確実に怒られます。 その回避方については追加で書きます。

cvLoadImage() を使いかつ、透過を行う場合

画像を見て、透過する箇所のマスクを作成し、IplImageに4チャンネル目を追加する関数を別途用意して、画像を読み込む。
http://wiki.livedoor.jp/mikk_ni3_92/d/%A6%C1%C3%CD%A4%C8%A5%C6%A5%AF%A5%B9%A5%C1%A5%E3%A4%CE%C0%DA%A4%EA%C8%B4%A4%AD
初期化時にアルファの設定

glAlphaFunc(GL_GREATER, 0);

と、実際透過するオブジェクトの描画時、透過終了時に

glEnable(GL_ALPHA_FUNC);
glDisable();

を忘れないこと。

yspngのライブラリを使う

http://homepage3.nifty.com/ysflight/pngdecoder/pngdecoderj.html
yspng 自体はpngデコーダなので、やはりOpenCVの場合と同様テクスチャにするにはglTexImage2D()などしてやる必要がある。

glpngのライブラリを使う

http://wiki.livedoor.jp/mikk_ni3_92/d/png%b7%c1%bc%b0%a4%ce%b2%e8%c1%fc

#include <GL/glpng.h>

GLuint texture[1];
pngInfo info;
texture[0] = pngBind("hoge.png", PNG_BUILDMIPMAPS, PNG_ALPHA, &info, GL_REPEAT, GL_LINEAR, GL_LINEAR);

これだけでテクスチャ登録完了。pngBind() の引数で透過や塗り方、拡大縮小法等の設定も簡単に。すばらしい。

引数の設定などはオフィシャルサイト参照
http://www.fifi.org/doc/libglpng-dev/glpng.html