天天看點

OpenGL的GL_Select模式的效率問題

每一本OpenGL入門的書都會講到OpenGL的Select模式,它采用一種方法使得可以擷取目前滑鼠點選的幾何圖形。簡單的來說這種方式就是首先調 整Projection矩陣,使得你透過從滑鼠點選附近的一個正方形(大小可設定)看到的世界。然後開始繪制,當每一次繪制的時候都會判斷你會不會看到。 如果看到,那麼,你就是選擇了這個幾何圖形了。更為具體的過程可以參見相關的書籍。

我重點要提到的是它的效率。

今 天我在彎管機程式裡面多加了一些代碼,實作可以選擇機器的各個部件。但是發現每次點選的時候反應速度很慢,以至于我可以看到明顯的停頓。而在直接渲染的時 候就沒有這個問題,相當流暢。最後我用PerformanceCounter計時,一步一步的找問題的根源,發現在glRenderMode (GL_Select)設定以後,在執行相同的繪圖指令會相當的慢。經我測試,在我6600GT顯示卡上,使用官方93.50驅動程式,渲染相同的畫面,用 選擇模式以後平均速度低于10%,也就是說渲染時間增加10倍以上。較為簡單的圖形渲染起來性能也低于普通渲染的30%。而這樣所造成的後果就是嚴重的延 遲。

剛開始我以為是我程式優化的問題,然而即便所有的物體都使用顯示清單,也存在這樣的問題。我想到這可能是OpenGL實作上的問題。

晚上我把Quadro FX1100專業顯示卡(晶片和GeForce FX5700相同)裝上以後,使用一樣的93.50驅動,再進行測試。發現情況有所好轉,選擇模式下平均速度是正常渲染模式下面的60%左右。已經感覺不出延時。

然後我又在虛拟機下面進行測試,然而得到的現象卻截然不同。虛拟機下面的SVGA顯示卡在選擇模式下面的速度比正常渲染快10倍左右。

很是迷茫,畢竟選擇模式下面要多一些操作,速度應該要慢一些,怎麼會快這麼多呢?虛拟機的測試可信麼?是NVIDIA的驅動的問題麼?網絡上也有人提到MAYA在NVIDIA顯示卡上面模式東西的時候運作很慢,可能問題是出現在驅動上吧。

另外身邊又沒有ATI顯示卡,是以暫時不能用ATI顯示卡作測試。但從網絡上很多人回報得知,ATI也存在相同的問題。

解決方法也有,就是自己寫相關的程式,看一個人的回帖說比較簡單,而他用的是BSP資料結構,對于通用的程式可能不太适用吧。