Re: [請益] 請問關於 Ogre 材質 透明色 設定
如你的原文有推文提到需要開啟alpha test才會有你想要的功能
在你的情況中,你將depth write enable打開(true),亦即只要被處理的
pixel就會將depth資訊寫在depth buffer中用來做depth test,
但如果沒打開alpha test,會造成即使alpha為0(假設會全透明)還是會處理該
pixel所以也是會將depth資訊寫入,會造成在後來繪製的而且被剛剛其實應該
全透明的地方的物件檔住的物件被拒絕繪製到該處,所以就變成還是剛剛畫上
去的透明的背景色;將depth write關閉的話就沒辦法用depth test來檢查
pixel距離camera的遠近而做繪製的篩選,所以後來畫的物件在場景中其實比面畫的
距離camera還要遠卻會蓋在最上面。
所以應該打開alpha test讓全透明的pixel(alpha == 0)被reject掉,這樣該
pixel就不會被處理,也不會將depth值寫入depth buffer,不會影響後來繪製在
該處的物件,記得沒錯的話ogre只要pass的alpha reject function的值不是被設定成
always pass的話就會自動打開alpha test的功能了,
好像沒辦法自己直接控制要關閉還是打開。
※ 引述《pleaselouis (LOUISN)》之銘言:
: 大家好 小弟因最近工作較忙 所以比較少上來 這次關於此主題又有問題向大家請教
: 請各位前輩 幫幫忙 給在下一些幫助 謝謝大家 <(_ _)>
: 小弟我目前已經可以做到 透明色處理的功能 但是還有些異常問題發生
: 目前我針對一個 樹 的模組做載入顯示 其中分別對 setDepthWriteEnabled() 作測試
: 這是將參數設為 False 的情況 : http://0rz.tw/FbpI1
: 而這是將參數設為 True 的情況 : http://0rz.tw/Em40q
: 首先討論關於 True 的圖片 可以看見 每一片樹葉模組 會以底色 蓋住下面或後面的模組
: 原本希望的正常顯示畫面 應該是可以從 樹葉的縫隙中 看到其他樹葉或是枝幹
: 但卻完全被其底色所干擾 要是應用到人物的頭髮上 後果應該會蠻慘的...
: 以下是相關程式碼 :
: Entity * EtTemp;
: EtTemp->getSubEntity(mTextureSubMeshIndex)->getMaterial()->getTechnique(0)
: ->getPass(0)->setSceneBlending(Ogre::SBF_SOURCE_ALPHA,
: Ogre::SBF_ONE_MINUS_SOURCE_ALPHA);
: EtTemp->getSubEntity(mTextureSubMeshIndex)->getMaterial()->getTechnique(0)
: ->getPass(0)->setDepthWriteEnabled(true);
: 再來討論關於 False 的圖片 底色蓋住下面或後面的模組 略為減緩 但還是有出現
: 但由於參數為False 故對於 Depth 的判斷關閉了 所以可以看到應該在比較後面的樹葉
: 整塊的顯示在比較前面的位置 甚至是蓋住了前面的樹葉...
: 以下是相關程式碼 :
: Entity * EtTemp;
: EtTemp->getSubEntity(mTextureSubMeshIndex)->getMaterial()->getTechnique(0)
: ->getPass(0)->setSceneBlending(Ogre::SBT_REPLACE);
: EtTemp->getSubEntity(mTextureSubMeshIndex)->getMaterial()->getTechnique(0)
: ->getPass(0)->setDepthWriteEnabled(false);
: 目前對於這樣的錯誤 幾乎沒有頭緒該如何解決
: 希望版上的前輩 可以再度指導一下晚輩 謝謝大家 <(_ _)>
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.116.37.95
討論串 (同標題文章)