osg光照注意事項
阿新 • • 發佈:2019-01-08
1、圖形程式設計中模型的光照效果受3個屬性影響:光源屬性;模型表面的材質屬性;模型的法線屬性。
2、OSG與OpenGL一樣(光源的setPosition的資料型別由osg::Vec4構成),最後一個值為0時就表示方向光源;非0表示點光源。
3、光照是相當視點計算(另外 還有兩個:ClipNode和TexGenNode),不同的組節點均受到影響。
模型發黑3種情況
1)、法線問題,光照只會對有法線的模型起作用,而模型經過縮放後法線是不會改變,所以需要手動設定屬性,讓法線隨著模型大小變化而變化。
node->getOrCreateStateSet()->setMode(GL_RESCALE_NORMAL, osg::StateAttribute::ON);
2)、有些時候可能是光照的問題,可直接把模型的光照關閉的方法
node->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF| StateAttribute::OVERRIDE);
3)、如果模型始終是一面發黑一面正常,可能是隻有平行光,需要設定個全域性光。
PS:osg資料中的lz.osg場景設定光照沒有任何效果(除了一個小水坑),是由於模型檔案中的GL_LIGHTING屬性處於關閉狀態。