Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void lmDistanceFeatures( const lmDistanceOutput* output, lmFeatures* features )
- {
- lmSimplex simplex = output->simplices[ output->simplexCount - 1 ];
- i32 iA[ 3 ] = { simplex.m_a.iA, simplex.m_b.iA, simplex.m_c.iA };
- i32 iB[ 3 ] = { simplex.m_a.iB, simplex.m_b.iB, simplex.m_c.iB };
- switch ( simplex.m_count )
- {
- case 1:
- features->numVertsA = lmFeatures::e_vert;
- features->numVertsB = lmFeatures::e_vert;
- features->simplexA[ 0 ] = iA[ 0 ];
- features->simplexB[ 0 ] = iB[ 0 ];
- break;
- case 2:
- if ( iA[ 0 ] == iA[ 1 ] )
- {
- features->numVertsA = lmFeatures::e_vert;
- features->numVertsB = lmFeatures::e_edge;
- features->simplexA[ 0 ] = iA[ 0 ];
- features->simplexB[ 0 ] = iB[ 0 ];
- features->simplexB[ 1 ] = iB[ 1 ];
- }
- else
- {
- features->numVertsA = lmFeatures::e_edge;
- features->numVertsB = lmFeatures::e_vert;
- features->simplexA[ 0 ] = iA[ 0 ];
- features->simplexA[ 1 ] = iA[ 1 ];
- features->simplexB[ 0 ] = iB[ 0 ];
- }
- break;
- case 3:
- if ( lmDifferent( iA[ 0 ], iA[ 1 ], iA[ 2 ] ) )
- {
- features->numVertsA = lmFeatures::e_face;
- features->simplexA[ 0 ] = iA[ 0 ];
- features->simplexA[ 1 ] = iA[ 1 ];
- features->simplexA[ 2 ] = iA[ 2 ];
- // @TODO: Don't treat face-vert same as face-edge
- //assert( lmSame( iB[ 0 ], iB[ 1 ], iB[ 2 ] ) );
- features->numVertsB = lmFeatures::e_vert;
- features->simplexB[ 0 ] = iB[ 0 ];
- }
- else if ( lmDifferent( iB[ 0 ], iB[ 1 ], iB[ 2 ] ) )
- {
- features->numVertsB = lmFeatures::e_face;
- features->simplexB[ 0 ] = iB[ 0 ];
- features->simplexB[ 1 ] = iB[ 1 ];
- features->simplexB[ 2 ] = iB[ 2 ];
- // @TODO: Don't treat face-vert same as face-edge
- //assert( lmSame( iB[ 0 ], iB[ 1 ], iB[ 2 ] ) );
- features->numVertsA = lmFeatures::e_vert;
- features->simplexA[ 0 ] = iA[ 0 ];
- }
- else
- {
- features->numVertsA = lmFeatures::e_edge;
- features->numVertsB = lmFeatures::e_edge;
- if ( iA[ 0 ] == iA[ 1 ] )
- {
- features->simplexA[ 0 ] = iA[ 0 ];
- features->simplexA[ 1 ] = iA[ 2 ];
- }
- else if ( iA[ 0 ] == iA[ 2 ] )
- {
- features->simplexA[ 0 ] = iA[ 0 ];
- features->simplexA[ 1 ] = iA[ 1 ];
- }
- else
- {
- features->simplexA[ 0 ] = iA[ 0 ];
- features->simplexA[ 1 ] = iA[ 2 ];
- }
- if ( iB[ 0 ] == iB[ 1 ] )
- {
- features->simplexB[ 0 ] = iB[ 0 ];
- features->simplexB[ 1 ] = iB[ 2 ];
- }
- else if ( iB[ 0 ] == iB[ 2 ] )
- {
- features->simplexB[ 0 ] = iB[ 0 ];
- features->simplexB[ 1 ] = iB[ 1 ];
- }
- else
- {
- features->simplexB[ 0 ] = iB[ 0 ];
- features->simplexB[ 1 ] = iB[ 2 ];
- }
- assert( features->simplexA[ 0 ] != features->simplexA[ 1 ] );
- assert( features->simplexB[ 0 ] != features->simplexB[ 1 ] );
- }
- break;
- default:
- assert( false );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement