2013-01-06 27 views
4

我正在嘗試爲3D場景(OpenSceneGraph與OpenGL)實現導航技術。除此之外,用戶應該能夠點擊屏幕上的一個場景對象來朝它移動。適用於基於頂點着色器的幾何變形的3D場景的通用拾取解決方案

導航技術應該集成到另一個項目中,該項目使用頂點着色器將全局變形應用到場景幾何。問題在於:由於幾何體是使用頂點着色器變形的,因此將鼠標光標位置取消投影到用戶實際選擇的位置的世界座標並不是直接的。但我需要這些座標來執行我的導航技術中的適當相機移動。

執行這種非投影的一種方法是修改頂點着色器(用於變形),讓它也將頂點的原始位置和法線存儲在單獨的紋理中。之後可以在鼠標位置讀取這些紋理以獲得所需的值。

現在,正如我所說,頂點着色器屬於另一個我實際上不想觸摸的項目。我的導航技術的一個目標是儘可能通用,以便輕鬆集成到其他項目中。

所以,這裏是一個問題:OpenSceneGraph或OpenGL中有什麼功能到目前爲止我沒有考慮過嗎?任何可以讓我獲得片段的世界座標的獨立於頂點着色器編碼器的東西?

回答

0

嗯,你總是可以做一個OpenGL選擇操作: http://www.glprogramming.com/red/chapter13.html

或者,您可以柵格化到用戶點擊一個非常小(1像素* 1像素)幀緩衝區,讀回z緩衝區和unproject的你進入世界空間的Z值。

+0

你所描述的是在3D場景中選擇「正常」的方法。我的問題是頂點着色器中的幾何體發生變形,這意味着您在屏幕上看到的幾何體的位置不是它在世界座標系中的實際位置。 –

相關問題