Changeset 8570
- Timestamp:
- 07/12/08 14:00:58
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
OpenSceneGraph/trunk/src/osgPlugins/obj/ReaderWriterOBJ.cpp
r8305 r8570 123 123 osg::Geometry* convertElementListToGeometry(obj::Model& model, obj::Model::ElementList& elementList, bool& rotate) const; 124 124 125 osg::Node* convertModelToSceneGraph(obj::Model& model, bool& rotate) const; 125 osg::Node* convertModelToSceneGraph(obj::Model& model, bool& rotate, 126 bool& noTesselateLargePolygons, bool& noTriStripPolygons) const; 126 127 127 128 inline osg::Vec3 transformVertex(const osg::Vec3& vec, const bool rotate) const ; … … 268 269 osg_material->setAmbient(osg::Material::FRONT_AND_BACK,material.ambient); 269 270 osg_material->setDiffuse(osg::Material::FRONT_AND_BACK,material.diffuse); 271 osg_material->setEmission(osg::Material::FRONT_AND_BACK,material.emissive); 272 270 273 if (material.illum == 2) { 271 274 osg_material->setSpecular(osg::Material::FRONT_AND_BACK,material.specular); … … 277 280 if (material.ambient[3]!=1.0 || 278 281 material.diffuse[3]!=1.0 || 279 material.specular[3]!=1.0) 282 material.specular[3]!=1.0|| 283 material.emissive[3]!=1.0) 280 284 { 281 285 osg::notify(osg::INFO)<<"Found transparent material"<<std::endl; … … 293 297 load_material_texture( model, material, stateset.get(), material.map_opacity, TEXTURE_UNIT_OPACITY ); 294 298 299 if (isTransparent) 300 { 301 stateset->setMode(GL_BLEND, osg::StateAttribute::ON); 302 stateset->setRenderingHint(osg::StateSet::TRANSPARENT_BIN); 303 } 304 295 305 materialToStateSetMap[material.name] = stateset.get(); 296 297 306 } 298 307 } … … 551 560 } 552 561 553 osg::Node* ReaderWriterOBJ::convertModelToSceneGraph(obj::Model& model, bool& rotate) const 562 osg::Node* ReaderWriterOBJ::convertModelToSceneGraph(obj::Model& model, 563 bool& rotate, bool& noTesselateLargePolygons, bool& noTriStripPolygons) const 554 564 { 555 565 … … 580 590 581 591 // tesseleate any large polygons 582 osgUtil::Tessellator tessellator; 583 tessellator.retessellatePolygons(*geometry); 584 592 if (!noTesselateLargePolygons) 593 { 594 osgUtil::Tessellator tessellator; 595 tessellator.retessellatePolygons(*geometry); 596 } 597 585 598 // tri strip polygons to improve graphics peformance 586 osgUtil::TriStripVisitor tsv; 587 tsv.stripify(*geometry); 588 599 if (!noTriStripPolygons) 600 { 601 osgUtil::TriStripVisitor tsv; 602 tsv.stripify(*geometry); 603 } 604 589 605 // if no normals present add them. 590 606 if (!geometry->getNormalArray() || geometry->getNormalArray()->getNumElements()==0) 591 607 { 592 osgUtil::SmoothingVisitor tsv;593 tsv.smooth(*geometry);608 osgUtil::SmoothingVisitor sv; 609 sv.smooth(*geometry); 594 610 } 595 611 … … 642 658 model.readOBJ(fin, local_opt.get()); 643 659 644 // code for checking the noRotation 660 // code for checking the nonRotation, noTesselateLargePolygons, 661 // and noTriStripPolygons 645 662 bool rotate = true; 646 if ((options!=NULL) && (options->getOptionString() == "noRotation")) 647 { 648 rotate = false; 649 } 650 651 osg::Node* node = convertModelToSceneGraph(model,rotate); 663 bool noTesselateLargePolygons = false; 664 bool noTriStripPolygons = false; 665 666 if (options!=NULL) 667 { 668 if (options->getOptionString() == "noRotation") 669 { 670 rotate = false; 671 } 672 673 if (options->getOptionString() == "noTesselateLargePolygons") 674 { 675 noTesselateLargePolygons = true; 676 } 677 678 if (options->getOptionString() == "noTriStripPolygons") 679 { 680 noTesselateLargePolygons = true; 681 } 682 } 683 684 osg::Node* node = convertModelToSceneGraph(model,rotate, 685 noTesselateLargePolygons,noTriStripPolygons); 652 686 return node; 653 687 } … … 663 697 model.readOBJ(fin, options); 664 698 665 // code for checking the nonRotation 699 // code for checking the nonRotation, noTesselateLargePolygons, 700 // and noTriStripPolygons 666 701 bool rotate = true; 667 if ((options!=NULL) && (options->getOptionString() == "noRotation")) 668 { 669 rotate = false; 670 } 671 672 osg::Node* node = convertModelToSceneGraph(model,rotate); 702 bool noTesselateLargePolygons = false; 703 bool noTriStripPolygons = false; 704 705 if (options!=NULL) 706 { 707 if (options->getOptionString() == "noRotation") 708 { 709 rotate = false; 710 } 711 712 if (options->getOptionString() == "noTesselateLargePolygons") 713 { 714 noTesselateLargePolygons = true; 715 } 716 717 if (options->getOptionString() == "noTriStripPolygons") 718 { 719 noTesselateLargePolygons = true; 720 } 721 } 722 723 osg::Node* node = convertModelToSceneGraph(model,rotate, 724 noTesselateLargePolygons,noTriStripPolygons); 673 725 return node; 674 726 } OpenSceneGraph/trunk/src/osgPlugins/obj/obj.cpp
r8305 r8570 156 156 unsigned int fieldsRead = sscanf(line+3,"%f %f %f %f", &r, &g, &b, &a); 157 157 158 if (fieldsRead==1) material->ambient.set(r,0.0f,0.0f,1.0f); 159 else if (fieldsRead==2) material->ambient.set(r,g,0.0f,1.0f); 160 else if (fieldsRead==3) material->ambient.set(r,g,b,1.0f); 161 else if (fieldsRead==4) material->ambient.set(r,g,b,a); 158 if (fieldsRead==1) 159 { 160 material->ambient[ 0 ] = r; 161 } 162 else if (fieldsRead==2) 163 { 164 material->ambient[ 0 ] = r; 165 material->ambient[ 1 ] = g; 166 } 167 else if (fieldsRead==3) 168 { 169 material->ambient[ 0 ] = r; 170 material->ambient[ 1 ] = g; 171 material->ambient[ 2 ] = b; 172 } 173 else if (fieldsRead==4) 174 { 175 material->ambient[ 0 ] = r; 176 material->ambient[ 1 ] = g; 177 material->ambient[ 2 ] = b; 178 material->ambient[ 3 ] = a; 179 } 162 180 } 163 181 else if (strncmp(line,"Kd ",3)==0) … … 165 183 unsigned int fieldsRead = sscanf(line+3,"%f %f %f %f", &r, &g, &b, &a); 166 184 167 if (fieldsRead==1) material->diffuse.set(r,0.0f,0.0f,1.0f); 168 else if (fieldsRead==2) material->diffuse.set(r,g,0.0f,1.0f); 169 else if (fieldsRead==3) material->diffuse.set(r,g,b,1.0f); 170 else if (fieldsRead==4) material->diffuse.set(r,g,b,a); 185 if (fieldsRead==1) 186 { 187 material->diffuse[ 0 ] = r; 188 } 189 else if (fieldsRead==2) 190 { 191 material->diffuse[ 0 ] = r; 192 material->diffuse[ 1 ] = g; 193 } 194 else if (fieldsRead==3) 195 { 196 material->diffuse[ 0 ] = r; 197 material->diffuse[ 1 ] = g; 198 material->diffuse[ 2 ] = b; 199 } 200 else if (fieldsRead==4) 201 { 202 material->diffuse[ 0 ] = r; 203 material->diffuse[ 1 ] = g; 204 material->diffuse[ 2 ] = b; 205 material->diffuse[ 3 ] = a; 206 } 171 207 } 172 208 else if (strncmp(line,"Ks ",3)==0) … … 174 210 unsigned int fieldsRead = sscanf(line+3,"%f %f %f %f", &r, &g, &b, &a); 175 211 176 if (fieldsRead==1) material->specular.set(r,0.0f,0.0f,1.0f); 177 else if (fieldsRead==2) material->specular.set(r,g,0.0f,1.0f); 178 else if (fieldsRead==3) material->specular.set(r,g,b,1.0f); 179 else if (fieldsRead==4) material->specular.set(r,g,b,a); 212 if (fieldsRead==1) 213 { 214 material->specular[ 0 ] = r; 215 } 216 else if (fieldsRead==2) 217 { 218 material->specular[ 0 ] = r; 219 material->specular[ 1 ] = g; 220 } 221 else if (fieldsRead==3) 222 { 223 material->specular[ 0 ] = r; 224 material->specular[ 1 ] = g; 225 material->specular[ 2 ] = b; 226 } 227 else if (fieldsRead==4) 228 { 229 material->specular[ 0 ] = r; 230 material->specular[ 1 ] = g; 231 material->specular[ 2 ] = b; 232 material->specular[ 3 ] = a; 233 } 180 234 } 181 235 else if (strncmp(line,"Ke ",3)==0) … … 183 237 unsigned int fieldsRead = sscanf(line+3,"%f %f %f %f", &r, &g, &b, &a); 184 238 185 if (fieldsRead==1) material->emissive.set(r,0.0f,0.0f,1.0f); 186 else if (fieldsRead==2) material->emissive.set(r,g,0.0f,1.0f); 187 else if (fieldsRead==3) material->emissive.set(r,g,b,1.0f); 188 else if (fieldsRead==4) material->emissive.set(r,g,b,a); 239 if (fieldsRead==1) 240 { 241 material->emissive[ 0 ] = r; 242 } 243 else if (fieldsRead==2) 244 { 245 material->emissive[ 0 ] = r; 246 material->emissive[ 1 ] = g; 247 } 248 else if (fieldsRead==3) 249 { 250 material->emissive[ 0 ] = r; 251 material->emissive[ 1 ] = g; 252 material->emissive[ 2 ] = b; 253 } 254 else if (fieldsRead==4) 255 { 256 material->emissive[ 0 ] = r; 257 material->emissive[ 1 ] = g; 258 material->emissive[ 2 ] = b; 259 material->emissive[ 3 ] = a; 260 } 189 261 } 190 262 else if (strncmp(line,"Tf ",3)==0) … … 192 264 unsigned int fieldsRead = sscanf(line+3,"%f %f %f %f", &r, &g, &b, &a); 193 265 194 if (fieldsRead==1) material->Tf.set(r,0.0f,0.0f,1.0f); 195 else if (fieldsRead==2) material->Tf.set(r,g,0.0f,1.0f); 196 else if (fieldsRead==3) material->Tf.set(r,g,b,1.0f); 197 else if (fieldsRead==4) material->Tf.set(r,g,b,a); 266 if (fieldsRead==1) 267 { 268 material->Tf[ 0 ] = r; 269 } 270 else if (fieldsRead==2) 271 { 272 material->Tf[ 0 ] = r; 273 material->Tf[ 1 ] = g; 274 } 275 else if (fieldsRead==3) 276 { 277 material->Tf[ 0 ] = r; 278 material->Tf[ 1 ] = g; 279 material->Tf[ 2 ] = b; 280 } 281 else if (fieldsRead==4) 282 { 283 material->Tf[ 0 ] = r; 284 material->Tf[ 1 ] = g; 285 material->Tf[ 2 ] = b; 286 material->Tf[ 3 ] = a; 287 } 198 288 } 199 289 else if (strncmp(line,"sharpness ",10)==0)
