當前位置:編程學習大全網 - 源碼下載 - OpenGL 實現正方形繪制,鍵盤控制移動(三)

OpenGL 實現正方形繪制,鍵盤控制移動(三)

其實,在上壹次繪制完壹個三角形之後,正方形的繪制流程大致是壹樣,只是需要控制正方形的移動,我們需要多註冊壹個特殊函數,用於監聽方向鍵的移動,並根據移動方向,平移正方形,首先看壹下最後實現的效果,當然gif倍速了,將就看吧?

首先,我們要實現的是壹個可以移動的的正方形,而不在是壹個靜態的圖形,那麽圖形的頂點數據就不是壹個不變的值;那我們應該怎麽設置頂點數據? 壹開始,我們的正方形有壹個初始位置,當每按壓壹次方向鍵(上/下/左/右),那麽整個正方形上的所有點朝某壹個方向移動壹個步長(每壹次移動的量stepSize),移動後的位置都是原來的坐標值加上壹個步長,當然,方向不同,stepSize有正負之分,那麽問題可以轉化為 :頂點數據 = 初始頂點數據 + 移動量。這樣我們就可以先將正方形個頂點的坐標先記錄下來,再用兩個變量分別記錄圖形在左右方向、上下方向的移動量記錄下來,即可得到我們實時的正方形頂點位置,也就可以繪制移動的正方形;準備以上數據如下:

從以上初始化數據,我們可以得到如下圖中的正方形,在窗口中的坐標系中的位置,如下圖,圖中的A、B、C、D的坐標,對應於正方形的頂點數據,圖中的原點O的坐標為(0,0,0),我們將這個點選為我們移動的參照點,及通過它移動後的坐標剛好對應(xPos,yPos, 0);以通過它來做邊界碰撞的判斷;

接下來看主函數的工作:主函數中我們需要:1、初始化GLUT庫;2、設置窗口模式、大小、標題;3.註冊需要回調的函數;4、設置渲染環境;5、啟動GLUT Roop;

在主函數中註冊的三個函數:ChangeSize、RenderScene、SpecialKey會在GLUT Roop收到對應的消息時,觸發回調,其流程如下

接下來看壹下具體函數的實現,首先看主函數

設置渲染環境的setupRC,這裏頂點的鏈接模式,我們改為了平面鏈接模式GL_TRIANGLE_FAN,並且頂點為4個

窗口的初始化或大小發生改變的回調函數,ChangeSize函數;

需要渲染時的函數RenderScene的實現

當我們按下方向鍵時,觸發的的時SpecialKeys,當按壹次左方向鍵,圖形發生如下改變,很容易得到這個時候的移動量的值,xPos -=stepSize;同理可得到向右移動壹次時,xPos +=?stepSize;我們也同樣可以得到向上或向下移動的yPos的變化,向上移動壹次 yPos +=?stepSize;向下移動時 yPos -=?stepSize;

我們想要正方形只在窗口中移動,那麽當正方向碰到邊時,我們應該讓其停下來,我們知道x軸方向和y軸方向的坐標範圍都為[-1.0f,1.0f],下圖中畫出了正方形移動到各端邊界時的直觀圖,當然不壹定只在x軸方向、或y軸移動,圖示只是為了理解邊界碰撞的坐標判斷,我們壹直以中心點為移動量基準點,所以圖中4個紅點的位置,即是正方形在各方向的最大移動量的情況,我們想要正方形不超出最左端,那必須xPos>= -1.0 +?blockSize,不超出最右端的條件時 xPos <= 1.0 -?blockSize;同理,不超出最頂點yPos <= 1.0 -?blockSize; 不超出最底端 yPos >= -1.0 +?blockSize;

邊界效果

SpecialKeys的具體實現:

  • 上一篇:netty channelgroup的廣播信息,channel怎樣獲取
  • 下一篇:Hbase源代碼導入eclipse
  • copyright 2024編程學習大全網