平面の描画

一辺の大きさがsizeの平面を描くコードです。デバッグ用に作ったのですが、普段は使うことが無いので削除したのですが、「もしかしたらいつか使うかも…」と思ったのでここにおいておきます。

void DrawPlane( const Plane &plane, int drawMode, float size )
{
	static const float plus_delta = 1.0f;
	const Vector3d &axis0 = plane.n;
	Vector3d axis1, axis2;
	
	axis1.set( axis0.v.x+plus_delta, axis0.v.y, axis0.v.z );
	axis1.normalize();
	axis2.cross( axis0, axis1 );
	if ( axis2.isZeroVector() )
	{
		axis1.set( axis0.v.x, axis0.v.y+plus_delta, axis0.v.z );
		axis1.normalize();
		axis2.cross( axis0, axis1 );
	}
	axis2.normalize();
	axis1.cross( axis2, axis0 );
	axis1.normalize();

	// 平面を描く
	if ( drawMode != 0 )
	{
		glDisable( GL_CULL_FACE );
		glEnable( GL_LIGHTING );
		if ( drawMode == 2 )
		{
			glEnable( GL_BLEND );
			glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
			glDepthMask(GL_FALSE);
		}
		float diffuse[] = { 0.0f, 1.0f, 0.0f, 0.5f };
		glMaterialfv( GL_FRONT, GL_DIFFUSE, diffuse );
		float halfsize = size*0.5f;
		glBegin(GL_QUADS);
		{
			glNormal3fv( axis0.vertex );
			glVertex3fv( (axis0*plane.d+axis1*-halfsize+axis2*-halfsize).vertex );
			glVertex3fv( (axis0*plane.d+axis1*+halfsize+axis2*-halfsize).vertex );
			glVertex3fv( (axis0*plane.d+axis1*+halfsize+axis2*+halfsize).vertex );
			glVertex3fv( (axis0*plane.d+axis1*-halfsize+axis2*+halfsize).vertex );
		}
		glEnd();
		glDisable( GL_BLEND );
		glDepthMask( GL_TRUE );
		glEnable( GL_CULL_FACE );
	}
}

ちなみにPlaneの定義はこうです。

// Ax+By+Cz+D = 0 の平面
struct Plane {
	Vector3d n;	// 平面の方程式の A, B, Dを表す(平面の法線を表す)
	float d;	// 平面の方程式の D を表す(法線は正規化されているはずなので、原点からの距離を表す)
};