2012-12-30 17 views
-1

我寫了一個opengl代碼,在對象上繪製一些對象,燈光和紋理。像箭頭這樣的特殊鍵可以旋轉我的紋理映射對象。但如果我繼續旋轉它們約10秒鐘,我甚至無法關閉opengl窗口。我不發佈我的代碼,它有點長,我不知道它的哪一部分會降低速度。在opengl中使用特殊鍵讓我的電腦真的很慢

+0

你用什麼函數調用來讀取按鍵? –

+0

glutSpecialFunc調用我的箭頭處理函數。 在箭頭處理程序: 如果(GLUT_KEY_UP) {//旋轉 glutPostRedisplay();}如果 (GLUT_KEY_DOWN ....) ......等等。 –

+4

找出它的哪一部分首先放慢速度,然後發佈一個問題 –

回答

1

根據你在評論部分的回答,我想我明白髮生了什麼。

glutSpecialFunc調用我的箭頭處理函數。在箭頭處理程序: 如果(GLUT_KEY_UP){//旋轉glutPostRedisplay();}如果(GLUT_KEY_DOWN ....) ......等等

這並不是處理鍵盤的正確方法您的大量程序中的事件。實際上,您的渲染循環中完成的工作量因用戶的按鍵次數而異。

而不是發佈響應按鍵重新顯示,而應該有一個主要繪圖循環,繼續重繪獨立於鍵盤活動的場景。您還需要具有位置(x,y,z)的狀態變量和查看旋轉的角度。繪圖例程簡單地使用這些狀態變量中的x,y,z和旋轉信息繪製場景。

然後,對於您的鍵盤處理,只需根據您在程序中支持的擊鍵來適當更改這些狀態​​變量即可。主繪圖循環將自動響應這些更改,因爲它可以與鍵盤處理程序異步自由運行。

+0

如果您熟悉Python和Pyglet,下面是一個簡單的opengl程序的一個很好的例子,它使用我正在談論的技術:https:// github .com/fogleman/Minecraft/blob/master/main.py –

+0

它幫助了一些人,但是現在它在~20秒後開始。有沒有像opengl中的東西有限的堆棧?也許它正在被填滿? –