void lwGetVertNormals( lwPointList *point, lwPolygonList *polygon ) { int j, k, n, g, h, p; float a; for ( j = 0; j < polygon->count; j++ ) { for ( n = 0; n < polygon->pol[ j ].nverts; n++ ) { for ( k = 0; k < 3; k++ ) polygon->pol[ j ].v[ n ].norm[ k ] = polygon->pol[ j ].norm[ k ]; if ( polygon->pol[ j ].surf->smooth <= 0 ) continue; p = polygon->pol[ j ].v[ n ].index; for ( g = 0; g < point->pt[ p ].npols; g++ ) { h = point->pt[ p ].pol[ g ]; if ( h == j ) continue; if ( polygon->pol[ j ].smoothgrp != polygon->pol[ h ].smoothgrp ) continue; a = vecangle( polygon->pol[ j ].norm, polygon->pol[ h ].norm ); if ( a > polygon->pol[ j ].surf->smooth ) continue; for ( k = 0; k < 3; k++ ) polygon->pol[ j ].v[ n ].norm[ k ] += polygon->pol[ h ].norm[ k ]; } normalize( polygon->pol[ j ].v[ n ].norm ); } } }
void getVertNormals( ObjectDB *odb, int i ) { int j, k, n, g, h, p; float a; for ( j = 0; j < odb->npolygons; j++ ) { for ( n = 0; n < odb->pol[ j ].nverts; n++ ) { for ( k = 0; k < 3; k++ ) odb->pol[ j ].v[ n ].norm[ i ][ k ] = odb->pol[ j ].norm[ i ][ k ]; if ( odb->surf[ odb->pol[ j ].sindex ].sman <= 0 ) continue; p = odb->pol[ j ].v[ n ].index; for ( g = 0; g < odb->pt[ p ].npols; g++ ) { h = odb->pt[ p ].pol[ g ]; if ( h == j ) continue; a = vecangle( odb->pol[ j ].norm[ i ], odb->pol[ h ].norm[ i ] ); if ( a > odb->surf[ odb->pol[ j ].sindex ].sman ) continue; for ( k = 0; k < 3; k++ ) odb->pol[ j ].v[ n ].norm[ i ][ k ] += odb->pol[ h ].norm[ i ][ k ]; } normalize( odb->pol[ j ].v[ n ].norm[ i ] ); } } }