空間くり抜き
FLARToolKitなどでもおなじみの空間をくり抜くやつをやってみた。
正直OpenGLは得意ではないのが、glBlendFuncやglCullFaceをいじくって何とか完成させた。
void CReverseCube::DrawShape(void) { int i, j; glEnable(GL_CULL_FACE); glDepthMask(GL_TRUE); glBlendFunc(GL_ZERO, GL_ONE); glCullFace(GL_FRONT); for(i = 1; i < 6; i++) { glNormal3d(normal[i].v[0], normal[i].v[1], normal[i].v[2]); glBegin(GL_POLYGON); for(j = 0; j < 4; j++) { glVertex3d(vertex[face[i][j] ].v[0], vertex[face[i][j] ].v[1], vertex[face[i][j] ].v[2]); } glEnd(); } glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glCullFace(GL_BACK); if(GetAlpha() < 1.0f) glDepthMask(GL_FALSE); for(i = 1; i < 6; i++) { glNormal3d(-normal[i].v[0], -normal[i].v[1], -normal[i].v[2]); glBegin(GL_POLYGON); for(j = 0; j < 4; j++) { glVertex3d(vertex[face[i][j] ].v[0], vertex[face[i][j] ].v[1], vertex[face[i][j] ].v[2]); } glEnd(); } glDisable(GL_CULL_FACE); }
これで四次元ポケットみたいなのができないかな。
いわゆるこれ。
参考サイト:
ポリゴンの裏表の描画 - OpenGL de プログラミング - livedoor Wiki(ウィキ)
http://wiki.livedoor.jp/mikk_ni3_92/d/%A5%DD%A5%EA%A5%B4%A5%F3%A4%CE%CE%A2%C9%BD%A4%CE%C9%C1%B2%E8