osg實現透明效果 正解

2021-07-09 20:04:02 字數 1049 閱讀 4993

最近某個專案中要用osg畫部分半透明效果的形狀,繪製可參考osg自帶例子:examples osggeometry 

但是半透明效果一直出不來,google一番之後 有位熱心網友提供的方案是:

osg::stateset* stateset = _geometryfeild->getorcreatestateset();

//alpha混合開啟

stateset->setmode(gl_blend,osg::stateattribute::on);

//取消深度測試

stateset->setmode( gl_depth_test, osg::stateattribute::off  );

stateset->setmode( gl_lighting, osg::stateattribute::off | osg::stateattribute::protected );

但每次 stateset->setmode( gl_depth_test, osg::stateattribute::off  );之後 繪製出來的區域不見了。。。。

經過多次試驗探索,發現是渲染級別的問題,預設情況下,osg所有載入進來的node渲染級別都是-1,這樣也就是所有節點的渲染級別是相同的。在這種情況下,取消深度測試後以實現半透明效果,但半透明效果的node節點會被其它node節點「覆蓋」-----》其實是半透明部分被其它節點渲染替代,見下面兩幅圖中的gl_polygon部分,第一副就是預設渲染級別下,半透明圖形被背景「覆蓋」,第二幅就是正解了

所以,osg繪製半透明形狀的正解如下:

osg::stateset* stateset = _geometryfeild->getorcreatestateset();

//alpha混合開啟

stateset->setmode

osg中實現半透明效果

在為球貼圖的基礎上,實現模擬地球的透明展示。是先前效果如下 實現後效果如下 實現 如下,主要是在狀態集中進行設定 osg ref ptrblendfunc new osg blendfunc blendfunc setsource osg blendfunc src alpha blendfunc ...

WM 實現透明效果

一 使用alphablend api 這個可以看黎老師的文章。見原文 net framework的winform程式支援支援調節控制項的透明度和gdi 用它可以實現例如淡入淡出這種很酷的介面效果。而.net compact framework的窗體和控制項不支援透明和gdi 因此常常利用來完成一些美...

css 實現透明效果

filter alpha opacity 50 moz opacity 0.5 khtml opacity 0.5 opacity 0.5 說明 opacity 0.5 這是最重要的,因為它是css標準.該屬性支援firefox,safari和 opera.filter alpha opacity ...