Changeset 3325
- Timestamp:
- 08/26/04 18:20:26 (9 years ago)
- Location:
- OpenSceneGraph/trunk/src/osgPlugins/obj
- Files:
-
- 3 modified
Legend:
- Unmodified
- Added
- Removed
-
OpenSceneGraph/trunk/src/osgPlugins/obj/ReaderWriterOBJ.cpp
r3323 r3325 269 269 } 270 270 271 bool reverseWinding = true;272 273 271 if (numPolygonElements>0) 274 272 { … … 285 283 drawArrayLengths->push_back(element.vertexIndices.size()); 286 284 287 if ( reverseWinding)285 if (model.needReverse(element)) 288 286 { 289 287 // need to reverse so add to OSG arrays in same order as in OBJ, as OSG assume anticlockwise ordering. … … 320 318 ++index_itr) 321 319 { 322 vertices->push_back( model.vertices[*index_itr]);320 vertices->push_back(transformVertex(model.vertices[*index_itr])); 323 321 } 324 322 if (numNormalIndices) … … 328 326 ++index_itr) 329 327 { 330 normals->push_back( model.normals[*index_itr]);328 normals->push_back(transformNormal(model.normals[*index_itr])); 331 329 } 332 330 } -
OpenSceneGraph/trunk/src/osgPlugins/obj/obj.cpp
r3324 r3325 463 463 464 464 } 465 466 osg::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 480 osg::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 496 bool Model::needReverse(const Element& element) const 497 { 498 if (element.normalIndices.empty()) return true; 499 500 return computeNormal(element)*averageNormal(element) < 0.0f; 501 } -
OpenSceneGraph/trunk/src/osgPlugins/obj/obj.h
r3323 r3325 160 160 void addElement(Element* element); 161 161 162 osg::Vec3 averageNormal(const Element& element) const; 163 osg::Vec3 computeNormal(const Element& element) const; 164 bool needReverse(const Element& element) const; 165 162 166 int remapVertexIndex(int vi) { return (vi<0) ? vertices.size()+vi : vi-1; } 163 167 int remapNormalIndex(int vi) { return (vi<0) ? normals.size()+vi : vi-1; }
