2012年10月15日月曜日
openFrameworksでムービーテクスチャを3Dで使う
なんでできないんやろうって思ってたら、update()関数でidleMovie()してなかったわ。
これが諸悪の根源。昨日時間かなり使ってしまった。
てゆーかこれ、すごい楽。今までかなり回りくどいことしてテクスチャ生成してたな。
これやったら普通の画像でもつかえるやないかい。
/*---------------------------------------
テクスチャをgetTextureReference()でもってくる。
これをbind()するだけで普通のテクスチャと同じように扱えます。
当然UV座標もリソースの左上が原点です。
---------------------------------------*/
ofTexture &tex = MN_video.getTextureReference();// ←ofVideoPlayer()のインスタンス
tex.bind();
glMatrixMode(GL_TEXTURE);
glPushMatrix();
glLoadIdentity();
ofTextureData texData = tex.getTextureData();
if( texData.textureTarget == GL_TEXTURE_RECTANGLE_ARB)
{
glScalef( tex.getWidth(), tex.getHeight(), 1.0f);
} else {
glScalef( tex.getWidth() / texData.tex_w, tex.getHeight() / texData.tex_h, 1.0f);
}
glMatrixMode(GL_MODELVIEW);
glColor4f(1.f, 1.f, 1.f, 1.f);
// UV座標が
// 0-1
// | |
// 3-2 というイメージ
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS);
glTexCoord2d( 0.f, 0.f); glVertex3f( myPosition[3].x, myPosition[3].y, myPosition[3].z);
glTexCoord2d( 1.f, 0.f); glVertex3f( myPosition[0].x, myPosition[0].y, myPosition[0].z);
glTexCoord2d( 1.f, 1.f); glVertex3f( myPosition[1].x, myPosition[1].y, myPosition[1].z);
glTexCoord2d( 0.f, 1.f); glVertex3f( myPosition[2].x, myPosition[2].y, myPosition[2].z);
glEnd();
glDisable(GL_TEXTURE_2D);
MN_video.getTextureReference().unbind();
glMatrixMode(GL_TEXTURE);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿