2016-08-01 4 views
0

다소 큰 메쉬가 있습니다 (osgDB로로드). 또한 여러 개의 하위 메쉬가 있습니다.OpenSceneGraph Emissive Lighting

방출 조명을 설정하려고합니다. 그러나 나는 첫 번째 하위 메쉬 만 불이 붙는 것을 볼 수 있습니다. 모든 하위 메쉬를 어떻게 밝힐 수 있습니까? 장면을 밝히기 위해 조명을 사용하지 않습니다.

권장 방법은 무엇입니까? 내가 메쉬를 읽으면서 (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 

다음과 같은 디스플레이

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(); 

했다 : enter image description here

같은 메쉬 나는 meshlab로 표시 참조하십시오 enter image description here

답변

0

이것은 주로 모드 내 StateSet 나는 조직되어있다. 루트 노드에서 조명을 적용 할 수 있습니까?

stateset->setMode(GL_LIGHTING, osg::StateAttribute::OVERRIDE | osg::StateAttribute::ON); 

또한 그들은 어쩌면 그것 OVERRIDE|PROTECTED 플래그 노드 당 재정의 할당하는 방법을 볼 수있는 모델 내에서 모든 재료 및 StateSets을 덤프 작은 방문자 구현을 시도 할 수 있습니다. 테스트 용으로 모델 내의 모든 지형이나 기하학에 재질을 적용하려 했습니까?

+0

자료를 setState에 설정하고 루트 노드로 설정하면 자료가 루트 아래의 모든 노드에 적용되지 않습니까? – mkuse

+0

'오버라이드 | 보호 수준이 낮습니다. 확실한데 모델의 표준이 맞습니까? 테스트를 위해서만 일반 스무딩 방문자를 적용하려고 했습니까 :'static void osgUtil :: SmoothingVisitor :: smooth (osg :: Geometry & g)'? –