看板 GameDesign 關於我們 聯絡資訊
如你的原文有推文提到需要開啟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 (LOUIS￾N)》之銘言: : 大家好 小弟因最近工作較忙 所以比較少上來 這次關於此主題又有問題向大家請教 : 請各位前輩 幫幫忙 給在下一些幫助 謝謝大家 <(_ _)> : 小弟我目前已經可以做到 透明色處理的功能 但是還有些異常問題發生 : 目前我針對一個 樹 的模組做載入顯示 其中分別對 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