Ejemplo n.º 1
0
static int is_box_in_frustum(float *bmin, float *bmax)
{
   int i;
   for (i=0; i < 5; ++i)
      if (!test_plane(&frustum[i], bmin[0], bmin[1], bmin[2], bmax[0], bmax[1], bmax[2]))
         return 0;
   return 1;
}
Ejemplo n.º 2
0
//perhaps in engine is better? 
void find_best_split_plane( const std::vector <face_t >& faces
							// ,std::vector <face_t >& front
							// ,std::vector <face_t >& back
	) 
{
	//all time low
	score_t low={},s={};
	low.score = 999999;
		
	//along planes, along edges...
	for ( size_t i = faces.size() ; i--; )
	{
		face_t f = faces[i];
		//xplane_t p = { f.a, f.normal() };
		//test_plane(p, faces, s);
		//enum{ABC,AB,BC,CA};
		vec3 N = f.normal();
		plane_t planes[4] = {
			pmake( f.a, N),
			//this should always end up on front/front_on side
			pmake( f.a, vnormal(vcross( N, f.b - f.a ) ) ),
			pmake( f.b, vnormal(vcross( N, f.c - f.b ) ) ),
			pmake( f.c, vnormal(vcross( N, f.a - f.c ) ) )
		};
		//test planes
		for ( int j = 0; j < 4 ; ++j )
		{
			test_plane( planes[j], faces, s);
			if( s.score < low.score )
				low=s,low.face=i;
		}
	}
	//check score
	//use low.p to split front and backm or stop here if bad score
	
	//print
	printf( "\n\nBest plane for all %d\n", faces.size());
	printf( "index %d\n", low.face);
	printf( "score = %d\n", low.score );
	printf( "balance = %d\n", low.balance );
	printf( "splits = %d\n", low.split );
	printf( "coins = %d\n", low.coin );
	printf( "front = %d\n", low.front );
	printf( "back = %d\n", low.back );
	printf( "plane = %f, %f, %f,   %f\n",
			low.p.x,low.p.y,low.p.z,low.p.w );

}