使用的Android的OpenGL ES 1.1(HTC Desire的)...的Android的OpenGL ES 1.1:從模板緩衝區讀取
我在一般的問題是這樣的:在一個複雜的渲染
我有各種各樣的3D對象現場。我想檢查用戶是否點擊了特定的對象。該對象可能會部分隱藏,因此可能在場景中顯示爲幾乎任何形狀。如果用戶單擊場景中可見的部分對象,我只想讓對象「被選中」。這意味着我不能使用基於矢量的計算來計算物體相交,因爲這些計算不容易考慮物體的隱藏區域。
所以,我想出了一個主意...
我設置的模板緩存,使得無論對象是可見的模板緩衝區充滿了1S和其他地方的模板緩存爲0。當用戶點擊場景中的特定像素,我只需要檢查模板緩衝區,看它是否包含1或0,表示對象是否被點擊。
這在PC上完美運行,但在Android OpenGL ES 1.1上,似乎我無法使用glReadPixels()從模板緩衝區讀取,因爲GL_STENCIL_INDEX不受支持。
有誰知道是否有方法從模板緩衝區讀取此0/1?或者任何人都可以想出一個更好的算法來確定我的對象是否被點擊過?
非常感謝
可能值得注意的是,上述方法需要一點技巧,因爲在渲染緩衝區附件的紋理中(glReadPixel值應相應縮放),對於8位顏色值沒有默認支持。其他缺陷可能包括:glEnabled抖動和硬件供應商可能的一些實現怪癖(例如,某些視頻硬件在光柵化過程中可能不那麼精確)。有點晚了,但其他人可能會像我一樣查找這個答案。 – Rick77 2013-05-05 20:07:31