我有一个相当大的网格(我用osgDB加载)。它还具有多个子网格。
我正在试着设置发射灯。然而,我可以看到(怀疑),只有第一个子网格是亮的。怎么可能照亮所有子网格。我没有使用灯光来照亮场景。
推荐的方法是什么?
int main()
{
osg::Node * cytBuilding = osgDB::readNodeFile( OBJ_FILE );
osg::Group * root = new osg::Group();
osg::PositionAttitudeTransform * scenePAT = new osg::PositionAttitudeTransform();
root->addChild(scenePAT);
scenePAT->addChild( cytBuilding );
//material
osg::Material* material = new osg::Material();
material->setAmbient(osg::Material::FRONT, osg::Vec4(1.0,1.0f,1.0f,1.0f));
material->setDiffuse(osg::Material::FRONT, osg::Vec4(1.0,1.0f,1.0f,1.0f));
material->setSpecular(osg::Material::FRONT, osg::Vec4(0.0,0.0f,0.0f,1.0f));
material->setEmission(osg::Material::FRONT, osg::Vec4(1.0,1.0f,1.0f,1.0f));
osg::StateSet* stateset = new osg::StateSet();
stateset->setAttributeAndModes(material,osg::StateAttribute::OVERRIDE|osg::StateAttribute::ON);
root->setStateSet(stateset);
// viewer
osgViewer::Viewer viewer;
viewer.setSceneData( root );
viewer.realize();
return viewer.run();当我读取网格(osgDB::readNodeFile())时,它显示以下错误消息
*** line not handled *** :map_bump
*** line not handled *** :bump
*** line not handled *** :map_opacity
*** line not handled *** :map_d
*** line not handled *** :refl
*** line not handled *** :map_kS
*** line not handled *** :map_Ns结果显示为:

当我使用meshlab显示相同的网格时,我看到

发布于 2016-08-11 15:25:18
这在很大程度上取决于模型中的StateSets是如何组织的。你能试着在你的根节点上强制照明吗?
stateset->setMode( GL_LIGHTING, osg::StateAttribute::OVERRIDE | osg::StateAttribute::ON );您还可以尝试实现一个小访问器来转储模型中的所有Material和StateSets,以查看它们是如何分配的,可能会使用OVERRIDE|PROTECTED标志覆盖每个节点。仅为了测试,您是否尝试将材质应用于模型中的所有测地点或几何体?
https://stackoverflow.com/questions/38691492
复制相似问题