ARにエフェクト(その2)

AR部だけにエフェクトかけるのに、OpenGLのアルファ値を取り出して、マスクを作る必要がある。アルファ値を取り出すのにglReadPixels関数を使っていたが、出来る時と出来ない時があった。

glReadPixels(0, 0, size.width, size.height, GL_RGBA, GL_UNSIGNED_BYTE, temp->imageData);

なんでかな〜と思い調べていると、glutInitDisplayMode関数の引数でGLUT_RGBAを使っていたけど、glut.h内のこれの定義がGLUT_RGBと同じになってた。

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
/* Display mode bit masks. */
#define GLUT_RGB			0
#define GLUT_RGBA			GLUT_RGB

まさかと思い、glutInitDisplayMode関数の引数にGLUT_ALPHAを追加してみたら直った。

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_ALPHA | GLUT_DEPTH);
glReadPixels(0, 0, size.width, size.height, GL_RGB, GL_UNSIGNED_BYTE, temp->imageData);
glReadPixels(0, 0, size.width, size.height, GL_ALPHA, GL_UNSIGNED_BYTE, alpha->imageData);