Example #1
0
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 );
      }
   }
}
Example #2
0
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 ] );
      }
   }
}