關於osg怎麼設置物體顏色的問題

osg設置物體顏色有兩種方式,第一種是直接設置頂點的顏色,第二種是設置材質的顏色。一般只選其中一種。

 

先說第一種,可以直接將每個頂點的顏色傳入Geometry中。

    osg::ref_ptr<osg::Geometry> geometry = new osg::Geometry;
    osg::ref_ptr<osg::Vec4Array> colors = new osg::Vec4Array;
    colors->push_back(osg::Vec4(1.0, 0.0, 0.0, 0.0));
    colors->push_back(osg::Vec4(1.0, 0.0, 0.0, 0.0));
    colors->push_back(osg::Vec4(1.0, 0.0, 0.0, 0.0));
    colors->push_back(osg::Vec4(1.0, 0.0, 0.0, 0.0));
    colors->push_back(osg::Vec4(1.0, 0.0, 0.0, 0.0));
    geometry->setColorArray(colors);
    geometry->setColorBinding(osg::Geometry::BIND_PER_VERTEX);

然後在材質中設置顏色的模式。

    osg::Material* material = new osg::Material;
    material->setColorMode(osg::Material::AMBIENT);
    stateSet->setAttributeAndModes(material, osg::StateAttribute::ON);

關於顏色模式怎麼設置的問題,本人經過測試,發現顏色模式的意思有可能是:將頂點顏色以哪種方式表示。意思是說,如果設置爲osg::Material::AMBIENT,頂點顏色以環境光的方式表示;如果設置爲osg::Material::DIFFUSE,頂點顏色以漫反射的方式表示。大家可以將當前光源的環境光設置爲最亮,漫反射和鏡面反射都設置爲0。這時物體材質設置爲osg::Material::AMBIENT是有顏色的,而設置爲osg::Material::DIFFUSE是黑色的。如果將當前光源的漫反射設置爲最亮,環境光和鏡面反射都設置爲0。這時物體設置爲osg::Material::DIFFUSE纔是有顏色的。

 

然後是第二種設置顏色的方式是不設置頂點顏色,只設置材質顏色。

    osg::StateSet* stateSet = geode->getOrCreateStateSet();
    stateSet->setMode(GL_DEPTH_TEST, osg::StateAttribute::ON);
    osg::Material* material = new osg::Material;
    material->setAmbient(osg::Material::FRONT, osg::Vec4(0xCC / 255.0, 0x99 / 255.0, 0x33 / 255.0, 0.8f));
    stateSet->setAttributeAndModes(material, osg::StateAttribute::ON);

注意:此時不需要調用材質的setColorMode來設置顏色模式。

 

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