2015-01-06 48 views
0

我知道我只需要渲染鼠標所在的屏幕的1x1或3x3像素部分,使用對象ID作爲顏色,然後從顏色中獲取id。GPU鼠標採集OpenGL/WebGL

我已經實施了射線投球與球體採摘,我猜測它與使照相機在鼠標射線的方向看起來有關嗎?

如何渲染正確的幾個像素?

編輯:

設置相機在鼠標線工程的方向,但如果我做視小畫面尺度,但什麼(我覺得)我需要的是它被裁剪,而非縮放。我將如何實現這一目標?

+1

視口和調整投影矩陣 –

回答

1

最簡單的解決方案是使用剪刀測試。它允許您僅渲染窗口的指定矩形子區域內的像素。

例如,要你的渲染限制到在像素(x,y)的中心的3×3像素:

glScissor(x - 1, y - 1, 3, 3); 
glEnable(GL_SCISSOR_TEST); 
glDraw...(...); 
glDisable(GL_SCISSOR_TEST); 

注意,座標系統的原點是在窗口的左下方,而大多數窗口系統會給你一個座標系統的鼠標座標,座標系統的原點位於左上方。如果您的系統出現這種情況,您必須通過從windowHeight - 1中減去y座標來反轉y座標。

+0

這肯定是最簡單的方法。我在鼠標光線的方向上實現了設置投影矩陣,放大了我需要的1px區域(FOV/screenWidth)和設置1px視口。它應該更快,因爲如果片段着色器在視圖外面,它們會被跳過。如果我理解正確剪刀着色器後工作。然而,我的測試沒有顯示出明顯的性能差異。 – Martin

+0

性能影響可能來自導致gpu和cpu同步的讀像素。視口和剪刀在性能上應該是相似的,儘管剪刀較不復雜以匹配所看到的,例如,視圖矩陣保持不變 –