小菜學Chromium之OpenGL學習之二

2021-09-02 10:34:27 字數 2361 閱讀 5311

在這個教程裡,我們一起來玩第乙個opengl程式.它將顯示乙個空的opengl視窗,可以在視窗和全屏模式下切換,按esc退出.它是我們以後應用程式的框架.

在codeblock裡建立乙個新的glut win32程式(不是console控制台程式)後,我們還需要鏈結opengl庫檔案。

**的前4行包括了我們使用的每個庫檔案的標頭檔案。如下所示:

#include // windows的標頭檔案

#include // 包含最新的gl.h,glu.h庫

#include // 包含opengl實用庫

接下來需要設定使用的所有變數。本節中的例程將建立乙個空的opengl視窗,因此我們暫時還無需設定大堆的變數。餘下需要設定的變數不多,但十分重要。幾乎所寫的每乙個opengl程式中都會用到它們。

第一行設定的變數是rendering context(著色描述表)。每乙個opengl都被連線到乙個著色描述表上。著色描述表將所有的opengl呼叫命令連線到device context(裝置描述表)上。我將opengl的著色描述表定義為 hrc 。要讓程式能夠繪製視窗的話,還需要建立乙個裝置描述表,也就是第二行的內容。windows的裝置描述表被定義為 hdc 。dc將視窗連線到gdi(graphics device inte***ce圖形裝置介面)。而rc將opengl連線到dc。第三行的變數 hwnd 將儲存由windows給我們的視窗指派的控制代碼。最後,第四行為我們的程式建立了乙個instance(例項)。

hglrc           hrc=null;// 視窗著色描述表控制代碼

hdc             hdc=null;// opengl渲染描述表控制代碼

hwnd            hwnd=null;// 儲存我們的視窗控制代碼

hinstance       hinstance;// 儲存程式的例項

boolkeys[256];// 儲存鍵盤按鍵的陣列

boolactive=true;// 視窗的活動標誌,預設為true

boolfullscreen=true;// 全屏標誌預設,預設設定成全屏模式

下面的**的作用是重新設定opengl場景的大小,而不管視窗的大小是否已經改變(假定您沒有使用全屏模式)。opengl場景的尺寸將被設定成它顯示時所在視窗的大小。

glvoid resizeglscene(glsizei width, glsizei height)

glviewport(0, 0, width, height);// 重置當前的視口

glmatrixmode(gl_projection);// 選擇投影矩陣

glloadidentity();// 重置投影矩陣

// 設定視口的大小

gluperspective(45.0f,(glfloat)width/(glfloat)height,0.1f,100.0f);

glmatrixmode(gl_modelview);// 選擇模型觀察矩陣

glloadidentity();// 重置模型觀察矩陣}

接下的**段中,我們將對opengl進行所有的設定。我們將設定清除螢幕所用的顏色,開啟深度快取,啟用smooth shading(陰影平滑),等等。

int initgl(glvoid)// 此處開始對opengl進行所有設定

下一段包括了所有的繪圖**。任何所想在螢幕上顯示的東東都將在此段**中出現。

int drawglscene(glvoid)// 從這裡開始進行所有的繪製

下面是我們的windows程式的入口。將會呼叫視窗建立例程,處理視窗訊息,並監視人機互動。

int winapi winmain(hinstancehinstance,// 當前視窗例項

hinstancehprevinstance,// 前乙個視窗例項

lpstrlpcmdline,// 命令列引數

intncmdshow)// 視窗顯示狀態

下面是迴圈的開始。只要done保持false,迴圈一直進行。

保持迴圈直到 done=true

while(!done)

else

}else// 如果沒有訊息

else// 不是退出的時候,重新整理螢幕}}

如果done變數不再是false,程式退出。正常銷毀opengl視窗,將所有的記憶體釋放,退出程式。

// 關閉程式

killglwindow();// 銷毀視窗

return (msg.wparam);// 退出程式

}在這一課中,詳細解釋了所有的基本步驟。每一步都與設定有關,並建立了乙個全屏opengl程式。這是框架,幾乎每個opengl程式都會用到這些步驟。

參考資料:nehe的opengl教程

小菜鳥帶著夢想學chromium

風雨送春歸,飛雪迎春到。已是懸崖百丈冰,猶有花枝俏。俏也不爭春,只把春來報。待到山花爛漫時,她在叢中笑。這首卜運算元 詠梅可是應了我的心情了。最近換工作,受到頻頻打擊,面試過程中發現滿世界都是搞chromium的,面試官看起來都快90後了,但是後生可畏,chromium聊起來一套一套的,什麼gpu加...

小菜鳥學C 物件導向之繼承

關於繼承 兩個要點 1.子類繼承父類的屬性方法 2.父類成員中被private修飾的私有字段不能被繼承 private 即私有訪問許可權 只限本類成員訪問 子類和例項都不能訪問 需要注意的是 子類不繼承父類有引數的建構函式 但是會預設呼叫父類的那個無參的建構函式 當在父類中建立乙個有引數的建構函式時...

小菜鳥學C 介面

基本語法 public inte ce 介面名稱 官方定義 介面是指定一組函式成員而不實現成員的引用型別,其他型別 類和結構可以實現介面。舉個例子 我們需要定義兩個類 企鵝類和麻雀類 他們都有共通的特點 吃喝睡。這時候利用多型的思想我們可以 定義乙個父類 鳥類。抽象類 鳥類 public abstr...