空間くり抜き

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