- if( rb_box_triangle_sat( rba, tri ) )
- {
- vg_line(tri[0],tri[1],0xff50ff00 );
- vg_line(tri[1],tri[2],0xff50ff00 );
- vg_line(tri[2],tri[0],0xff50ff00 );
- }
- else
- {
- vg_line(tri[0],tri[1],0xff0000ff );
- vg_line(tri[1],tri[2],0xff0000ff );
- vg_line(tri[2],tri[0],0xff0000ff );
-
- continue;
- }
-
- v3f v0,v1,n;
- v3_sub( tri[1], tri[0], v0 );
- v3_sub( tri[2], tri[0], v1 );
- v3_cross( v0, v1, n );
- v3_normalize( n );
-
- /* find best feature */
- float best = v3_dot( rba->right, n );
- int axis = 0;
-
- float cy = v3_dot( rba->up, n );
- if( fabsf(cy) > fabsf(best) )
- {
- best = cy;
- axis = 1;
- }
-
- float cz = -v3_dot( rba->forward, n );
- if( fabsf(cz) > fabsf(best) )
- {
- best = cz;
- axis = 2;
- }
-
- v3f manifold[4];
-
- if( axis == 0 )
- {
- float px = best > 0.0f? rba->bbx[0][0]: rba->bbx[1][0];
- manifold[0][0] = px;
- manifold[0][1] = rba->bbx[0][1];
- manifold[0][2] = rba->bbx[0][2];
- manifold[1][0] = px;
- manifold[1][1] = rba->bbx[1][1];
- manifold[1][2] = rba->bbx[0][2];
- manifold[2][0] = px;
- manifold[2][1] = rba->bbx[1][1];
- manifold[2][2] = rba->bbx[1][2];
- manifold[3][0] = px;
- manifold[3][1] = rba->bbx[0][1];
- manifold[3][2] = rba->bbx[1][2];
- }
- else if( axis == 1 )
- {
- float py = best > 0.0f? rba->bbx[0][1]: rba->bbx[1][1];
- manifold[0][0] = rba->bbx[0][0];
- manifold[0][1] = py;
- manifold[0][2] = rba->bbx[0][2];
- manifold[1][0] = rba->bbx[1][0];
- manifold[1][1] = py;
- manifold[1][2] = rba->bbx[0][2];
- manifold[2][0] = rba->bbx[1][0];
- manifold[2][1] = py;
- manifold[2][2] = rba->bbx[1][2];
- manifold[3][0] = rba->bbx[0][0];
- manifold[3][1] = py;
- manifold[3][2] = rba->bbx[1][2];
- }
- else
- {
- float pz = best > 0.0f? rba->bbx[0][2]: rba->bbx[1][2];
- manifold[0][0] = rba->bbx[0][0];
- manifold[0][1] = rba->bbx[0][1];
- manifold[0][2] = pz;
- manifold[1][0] = rba->bbx[1][0];
- manifold[1][1] = rba->bbx[0][1];
- manifold[1][2] = pz;
- manifold[2][0] = rba->bbx[1][0];
- manifold[2][1] = rba->bbx[1][1];
- manifold[2][2] = pz;
- manifold[3][0] = rba->bbx[0][0];
- manifold[3][1] = rba->bbx[1][1];
- manifold[3][2] = pz;
- }
-
- for( int j=0; j<4; j++ )
- m4x3_mulv( rba->to_world, manifold[j], manifold[j] );
-
- vg_line( manifold[0], manifold[1], 0xffffffff );
- vg_line( manifold[1], manifold[2], 0xffffffff );
- vg_line( manifold[2], manifold[3], 0xffffffff );
- vg_line( manifold[3], manifold[0], 0xffffffff );
-
- for( int j=0; j<4; j++ )
- {
- rb_ct *ct = buf+count;
-
- v3_copy( manifold[j], ct->co );
- v3_copy( n, ct->n );
-
- float l0 = v3_dot( tri[0], n ),
- l1 = v3_dot( manifold[j], n );