從我在互聯網上看到的情況來看,這個問題不能用我的方法真正解決。用Alpha測試Opengl選擇
我目前正在編寫一個程序,使用選擇緩衝區通過場景中的所有對象。然而,其中一個對象是其中很大一部分具有alpha 0的紋理。它在渲染時工作良好,不顯示alpha值,但在選擇模式下,跳過alpha測試並將鼠標懸停在上方透明區域選擇對象而不是其後面的任何東西。
有什麼辦法可以在選擇模式下啓用alpha測試嗎?
從我在互聯網上看到的情況來看,這個問題不能用我的方法真正解決。用Alpha測試Opengl選擇
我目前正在編寫一個程序,使用選擇緩衝區通過場景中的所有對象。然而,其中一個對象是其中很大一部分具有alpha 0的紋理。它在渲染時工作良好,不顯示alpha值,但在選擇模式下,跳過alpha測試並將鼠標懸停在上方透明區域選擇對象而不是其後面的任何東西。
有什麼辦法可以在選擇模式下啓用alpha測試嗎?
我想你的意思是alpha混合將被跳過。我沒有對它進行測試,但從here的評論中可以看出,alpha測試仍然在GL_SELECT模式下使用。所以你會想glEnable(GL_ALPHA_TEST),然後使用glAlphaFunc()來設置你的閾值多少alpha構成一個命中。要在盲目地嘗試選擇這些對象之前進行測試,只需渲染它即可。你會看到OpenGL只渲染你的多邊形的一部分;任何部分將構成點擊,而任何未繪製的部分將不會被您的GL_SELECT命中。
請評論,讓我知道它是如何工作的。如果你仍然無法使用它,我可以花時間爲你寫一個測試用例,但是如果你能獨立使用它,我寧願不花時間。 :)
另外,作爲參考,the OpenGL docs for Alpha test和the manpage for glAlphaFunc。
看起來glReadPixels是你在找什麼
http://www.opengl.org/sdk/docs/man/xhtml/glReadPixels.xml
使用類似:
glReadPixels (0, 0, XSCREEN, YSCREEN, GL_ALPHA, GL_UNSIGNED_BYTE, buffer);
這有什麼用?我不想知道緩衝區中的內容,我只是希望代碼不會返回任何東西,如果它是鼠標下的空白區域。 – 2009-07-27 19:35:06