解決osg中不能更改模型顏色問題

原文出處

前些天弄osg時更改不了模型顏色。這一次我把模型的單個object分出來做一個獨立的文件,然後再由osg的osgDB讀入並顯示。此時發現可以更改 模型的顏色。

    仔細觀察,發現在新的獨立文件中,object並沒有對默認的StateSet進行更改。由此看來確實是StateSet的值使object的顏色不能顯 示。

    原先的osg文件中,StateSet部分的定義爲:

    StateSet {
          UniqueID StateSet_0
          rendering_hint DEFAULT_BIN
          renderBinMode INHERIT
          Material {
            name "SketchUp_Default"
            ColorMode OFF
            ambientColor 0.117647 0.117647 0.117647 1
            diffuseColor 0.784314 0.784314 0.784314 1
            specularColor 0 0 0 0.33
            emissionColor 0 0 0 1
            shininess 25.6
          }


    問題出在Material中的ColorMode值上。ColorMode的意義爲它指定了質材的顏色跟蹤屬性。它可能的值有:

    AMBIENT :環境光顏色

    DIFFUSE :漫射光顏色

    SPECULAR :鏡面光顏色

    EMISSION :發射光顏色

    AMBIENT_AND_DIFFUSE :環境與漫射光顏色

    OFF :關閉模式

    當ColorMode的值是OFF時,材質的顏色跟蹤屬性被禁止,即材質的屬性值不會隨顏色的改變而變化。於是設置object的顏色將看不到任何的效 果。

 

    解決方法:將ColorMode的值改爲DIFFUSE即可

    在程序中的代碼:

osg::ref_ptr<osg::Vec4Array> v = new osg::Vec4Array();
v->push_back(osg::Vec4(1,0,0,1));
geom->setColorArray(v.get());

osg::StateSet* ss = geom->getOrCreateStateSet();
osg::Material* mat = new osg::Material();
mat->setColorMode(osg::Material::ColorMode::DIFFUSE);
ss->setAttribute(mat);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章