2013-05-08 64 views
0

我正在創建一個盒子,並在底部放置「磁鐵」。兩側稍微透明(α在0.2到0.5之間),底部是實心的。我正在嘗試使用gluUnProject()來選擇放置「磁鐵」的位置,但是當渲染盒子的兩側時,我無法將磁鐵放入盒子。OpenGl選擇

反正還有牆的兩面要渲染,但爲了鼠標點擊而忽略它們嗎?

我試過GL_CULL_FACE,但乍一看似乎並不是我正在尋找的東西。

回答

4

所以,如果我理解正確,你有半透明的盒子,當磁鐵在盒子裏面時,你想根據盒子的半透明看到磁鐵。

我的猜測是,當你繪製盒子時,你已經開啓了深度寫入功能,這樣,如果盒子在磁鐵之前碰到,那麼當你繪製磁鐵時,它將不能進行深度測試,那裏面不會因此而被繪製。

做到這一點,最簡單的方法是:

  1. 畫出所有的第一固態物體

  2. 禁用深度寫道:

    glDepthMask(GL_FALSE); 
    
  3. 使用次序無關的混合功能時繪製半透明物體,例如:

    glBlendFunc(GL_ONE, GL_ONE) 
    
  4. 畫出你所有的透明物體

  5. 啓用深度記寫道再次

    glDepthMask(GL_TRUE); 
    

熊,如果你可以使用一個交換的混合式擺脫這種簡單的方法只會工作,如果不是,那麼考慮使用與順序無關的透明度,一篇好文章是Pyarelal Knowles,Geoff Leach和Fabio Zambetta的「高效分層片段緩衝技術」

+0

哎呀!在第五步,我打算寫'glDepthMask(true);' – bigD 2013-05-08 17:25:24

+1

你可以隨時編輯你的文章 – datenwolf 2013-05-08 18:01:03