我有openGL代碼,它呈現一些對象併爲其中的一些顯示文本標籤。通過使用gluProject將適當的頂點投影到屏幕上,然後添加一個小的偏移量,使標籤位於頂點旁邊來顯示標籤。這樣每個標籤與屏幕頂點的距離相同。如何在openGL顯示列表中投影/未投影
我最初並沒有使用顯示列表(除了字形的顯示列表),並且它正常工作(如果有點慢)。現在我爲整個場景創建一個顯示列表,並發現標籤放置不正確。
我花了一段時間,但我想我已經基本上找到了問題:gluProject將投影矩陣,模型視圖矩陣和視口作爲參數。除了調用glGetDoublev(GL_MODELVIEW_MATRIX,...)等,我沒有辦法提供它們。但是,glGet函數在顯示列表中是「不允許的」,這在經驗上似乎意味着它們不會導致錯誤,而是立即執行。因此,編譯到顯示列表中的矩陣數據是從列表編譯時間而不是列表執行時間(這是一個問題,因爲我需要預編譯列表,而不是立即執行)。至少這是我目前的理論。
- 任何人都可以確認或否認這會導致問題?
- 如何解決這個問題?我只想做gluProject的工作,但使用列表的當前矩陣。
注意:我知道在近期的openGL版本中已經棄用了各種函數/方法;請不要讓我的答案沿着「你不應該這樣做」;-)
當我在顯示列表中調用glRotate時,會執行矩陣乘法。所以顯示列表在執行時必須以某種方式訪問當前的投影/模型視圖矩陣(或否?)。那麼可以不用glProject做什麼(不一定直接調用它,而是應用相同的計算),與這些矩陣相乘?這就是我所說的「使用列表的當前矩陣」。或者我誤解了一些東西(這很可能)? – Dabbler 2012-07-12 17:32:19