0
我正在創建一個盒子,並在底部放置「磁鐵」。兩側稍微透明(α在0.2到0.5之間),底部是實心的。我正在嘗試使用gluUnProject()來選擇放置「磁鐵」的位置,但是當渲染盒子的兩側時,我無法將磁鐵放入盒子。OpenGl選擇
反正還有牆的兩面要渲染,但爲了鼠標點擊而忽略它們嗎?
我試過GL_CULL_FACE,但乍一看似乎並不是我正在尋找的東西。
我正在創建一個盒子,並在底部放置「磁鐵」。兩側稍微透明(α在0.2到0.5之間),底部是實心的。我正在嘗試使用gluUnProject()來選擇放置「磁鐵」的位置,但是當渲染盒子的兩側時,我無法將磁鐵放入盒子。OpenGl選擇
反正還有牆的兩面要渲染,但爲了鼠標點擊而忽略它們嗎?
我試過GL_CULL_FACE,但乍一看似乎並不是我正在尋找的東西。
所以,如果我理解正確,你有半透明的盒子,當磁鐵在盒子裏面時,你想根據盒子的半透明看到磁鐵。
我的猜測是,當你繪製盒子時,你已經開啓了深度寫入功能,這樣,如果盒子在磁鐵之前碰到,那麼當你繪製磁鐵時,它將不能進行深度測試,那裏面不會因此而被繪製。
做到這一點,最簡單的方法是:
畫出所有的第一固態物體
禁用深度寫道:
glDepthMask(GL_FALSE);
使用次序無關的混合功能時繪製半透明物體,例如:
glBlendFunc(GL_ONE, GL_ONE)
畫出你所有的透明物體
啓用深度記寫道再次
glDepthMask(GL_TRUE);
熊,如果你可以使用一個交換的混合式擺脫這種簡單的方法只會工作,如果不是,那麼考慮使用與順序無關的透明度,一篇好文章是Pyarelal Knowles,Geoff Leach和Fabio Zambetta的「高效分層片段緩衝技術」
哎呀!在第五步,我打算寫'glDepthMask(true);' – bigD 2013-05-08 17:25:24
你可以隨時編輯你的文章 – datenwolf 2013-05-08 18:01:03