Show
Ignore:
Timestamp:
08/26/04 18:20:26 (10 years ago)
Author:
robert
Message:

Improvements to handling of winding of polygons.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/src/osgPlugins/obj/obj.cpp

    r3324 r3325  
    463463     
    464464} 
     465 
     466osg::Vec3 Model::averageNormal(const Element& element) const 
     467{ 
     468    osg::Vec3 normal; 
     469    for(Element::IndexList::const_iterator itr=element.normalIndices.begin(); 
     470        itr!=element.normalIndices.end(); 
     471        ++itr) 
     472    { 
     473        normal += normals[*itr]; 
     474    } 
     475    normal.normalize(); 
     476     
     477    return normal; 
     478} 
     479 
     480osg::Vec3 Model::computeNormal(const Element& element) const 
     481{ 
     482    osg::Vec3 normal; 
     483    for(unsigned int i=0;i<element.vertexIndices.size()-2;++i) 
     484    { 
     485        osg::Vec3 a = vertices[element.vertexIndices[i]]; 
     486        osg::Vec3 b = vertices[element.vertexIndices[i+1]]; 
     487        osg::Vec3 c = vertices[element.vertexIndices[i+2]]; 
     488        osg::Vec3 localNormal = (b-a)   ^(c-b); 
     489        normal += localNormal; 
     490    } 
     491    normal.normalize(); 
     492     
     493    return normal; 
     494} 
     495 
     496bool Model::needReverse(const Element& element) const 
     497{ 
     498    if (element.normalIndices.empty()) return true; 
     499     
     500    return computeNormal(element)*averageNormal(element) < 0.0f; 
     501}