- state->setShadeModel( shade_model );
- state->enable( GL_LIGHTING );
- state->enable ( GL_CULL_FACE ) ;
- state->enable( GL_TEXTURE_2D );
- state->disable( GL_BLEND );
- state->disable( GL_ALPHA_TEST );
-
- if ( !defer_tex_load ) {
- SG_LOG(SG_INPUT, SG_INFO, " " << _status[i].texture_path );
- assignTexture( state, _status[i].texture_path, wrapu, wrapv );
- _status[i].texture_loaded = true;
+ osg::ShadeModel* shadeModel = new osg::ShadeModel;
+ shadeModel->setMode(osg::ShadeModel::SMOOTH);
+ stateSet->setAttribute(shadeModel);
+
+ osg::CullFace* cullFace = new osg::CullFace;
+ cullFace->setMode(osg::CullFace::BACK);
+ stateSet->setMode(GL_CULL_FACE, osg::StateAttribute::ON);
+ stateSet->setAttribute(cullFace);
+
+ stateSet->setMode(GL_LIGHTING, osg::StateAttribute::ON);
+
+ _status[i].texture_loaded = false;
+
+ osg::Material* material = new osg::Material;
+ material->setColorMode(osg::Material::AMBIENT_AND_DIFFUSE);
+ material->setAmbient(osg::Material::FRONT_AND_BACK, ambient.osg());
+ material->setDiffuse(osg::Material::FRONT_AND_BACK, diffuse.osg());
+ material->setSpecular(osg::Material::FRONT_AND_BACK, specular.osg());
+ material->setEmission(osg::Material::FRONT_AND_BACK, emission.osg());
+ material->setShininess(osg::Material::FRONT_AND_BACK, shininess );
+ stateSet->setAttribute(material);
+
+ if (ambient[3] < 1 || diffuse[3] < 1 ||
+ specular[3] < 1 || emission[3] < 1) {
+ stateSet->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
+ stateSet->setMode(GL_BLEND, osg::StateAttribute::ON);
+ stateSet->setMode(GL_ALPHA_TEST, osg::StateAttribute::ON);