opengl入門學習
——寫給想用計算機畫圖的朋友
opengl作為當前主流的圖形api之一,它在一些場合具有比directx更優越的特性。
1、與c語言緊密結合。
opengl命令最初就是用c語言函式來進行描述的,對於學習過c語言的人來講,opengl是容易理解和學習的。如果你曾經接觸過tc的graphics.h,你會發現,使用opengl作圖甚至比tc更加簡單。
2、強大的可移植性。
微軟的direct3d雖然也是十分優秀的圖形api,但它只用於windows系統。而opengl不僅用於windows,還可以用於unix/linux等其它系統,它甚至在大型計算機、各種專業計算機(如:醫療用顯示裝置)上都有應用。並且,opengl的基本命令都做到了硬體無關,甚至是平台無關。
3、高效能的圖形渲染。
opengl是乙個工業標準,它的技術緊跟時代,現今各個顯示卡廠家無一不對opengl提供強力支援,激烈的競爭中使得opengl效能一直領先。
opengl官方**(英文)
下面將對windows下的opengl程式設計進行簡單介紹。
學習opengl
前的準備工作
第一步,選擇乙個編譯環境
現在windows系統的主流編譯環境有visual studio,broland c++ builder,dev-c++等,它們都是支援opengl的。這裡我們選擇vc++6.0作為學習opengl的環境。
第二步,安裝glut工具包
/resources/libraries/glut/glut_downloads.php/glutdlls37beta.zip
windows環境下安裝glut的步驟:
2、把解壓得到的glut.h複製到vc的「include\gl」資料夾下。
3、把解壓得到的glut.lib和glut32.lib複製到靜態函式庫所在資料夾 「vc\lib」資料夾。
4、把解壓得到的glut.dll和glut32.dll複製到作業系統目錄下面的system32資料夾內。(典型的位置為:c:\windows\system32)
第三步,建立乙個opengl工程
1、啟動vc++6.0程式
3、然後向該工程新增乙個**檔案,擴充套件名為.c(注意用.c來作為檔案結尾。)
新增**檔案的方法:
方法一:新增已經存在的.c檔案。在fileview 管理器中,選擇source files資料夾---右擊---add files to folder…。或者從「工程」選單---「增加到工程」---「檔案」。
方法二:新增不存在的.c檔案。從「檔案」選單---「新建」---選擇「檔案」選項卡---c++ source file,將右邊的「新增到工程」打勾,在「檔名」處輸入擴充套件名為.c的檔名(記住一定輸入副檔名 .c !!!)---「確定」,然後在.c檔案中輸入**。
第四步,編譯連線。在選單「build」中選擇compile或build。
第五步,執行程式。在選單「build」中選擇execute執行。
(說明:以上建立的是乙個win32控制台程式
,包含乙個控制視窗和opengl視窗。如果只需要乙個opengl視窗的應用程式,則將上面的第三步中的2小步改為: 2、
選擇file->new->project,然後選擇
,選擇乙個工程名
稱並設定好工程所在位置,
然後按ok。在
彈出的對話方塊
右邊點empty project,選擇finish。
同時,在第四步編譯連線前,要先進行編譯和連線選項的設定:
選擇 project -> settings ->選擇 link 選項卡:
從 category(分類)中選擇 output(輸出),在 entry-point synmbol(入口點)文字框中鍵入 maincrtstartup ;
從 category(分類)中選擇 「常規」,在object/library modules(物件/庫模式)一欄中新增: opengl32.lib glu32.lib glut32.lib這三個opengl的鏈結庫。)
(說明: 對於已存在的控制台工程, 有乙個簡單的辦法將它轉換成win32應用程式:
根據上面的步驟修改入口點
在 project options 文字框中用 subsystem:windows 覆蓋 subsystem:console
或者你可以直接在你的源**開頭處新增一行**:
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"maincrtstartup\"" )
如此一來,應用程式就不會出現控制台視窗,而只是乙個opengl視窗了。)
第乙個opengl
程式乙個簡單的opengl程式如下:(注意,如果需要編譯並執行,需要正確安裝glut,安裝方法如上所述)
// opengl.c
#include
void mydisplay(void)
int main(int argc, char *argv)
該程式的作用是在乙個黑色的視窗**畫乙個白色的矩形。下面對各行語句進行說明。
怎麼樣?**還不算長吧?
首先,需要包含標頭檔案#include,這是glut的標頭檔案。
本來opengl程式一般還要包含和,但glut的標頭檔案中已經自動將這兩個檔案包含了,不必再次包含。
然後看main函式。
int main(int argc, char *argv),這個是帶命令列引數的main函式,各位應該見過吧?沒見過的同志們請多翻翻書,等弄明白了再往下看。
注意main函式中的各語句,除了最後的return之外,其餘全部以glut開頭。這種以glut開頭的函式都是glut工具包所提供的函式,下面對用到的幾個函式進行介紹。
1、glutinit,對glut進行初始化,這個函式必須在其它的glut使用之前呼叫一次。其格式比較死板,一般照抄這句glutinit(&argc, argv)就可以了。
2、glutinitdisplaymode,設定顯示方式,其中glut_rgb表示使用rgb顏色,與之對應的還有glut_index(表示使用索引顏色)。glut_single表示使用單緩衝,與之對應的還有glut_double(使用雙緩衝)。更多資訊,請自己google。當然以後的教程也會有一些講解。
3、glutinitwindowposition,這個簡單,設定視窗在螢幕中的位置。
4、glutinitwindowsize,這個也簡單,設定視窗的大小。
5、glutcreatewindow,根據前面設定的資訊建立視窗。引數將被作為視窗的標題。注意:視窗被建立後,並不立即顯示到螢幕上。需要呼叫glutmainloop才能看到視窗。
6、glutdisplayfunc,設定乙個函式,當需要進行畫圖時,這個函式就會被呼叫。(這個說法不夠準確,但準確的說法可能初學者不太好理解,暫時這樣說吧)。
7、glutmainloop,進行乙個訊息迴圈。(這個可能初學者也不太明白,現在只需要知道這個函式可以顯示視窗,並且等待視窗關閉後才會返回,這就足夠了。)
在glutdisplayfunc函式中,我們設定了「當需要畫圖時,請呼叫mydisplay函式」。於是mydisplay函式就用來畫圖。觀察mydisplay中的三個函式呼叫,發現它們都以gl開頭。這種以gl開頭的函式都是opengl的標準函式,下面對用到的函式進行介紹。
1、glclear,清除。gl_color_buffer_bit表示清除顏色,glclear函式還可以清除其它的東西,但這裡不作介紹。
2、glrectf,畫乙個矩形。四個引數分別表示了位於對角線上的兩個點的橫、縱座標。
3、glflush,保證前面的opengl命令立即執行(而不是讓它們在緩衝區中等待)。其作用跟fflush(stdout)類似。
/resources/libraries/glut/glutdlls37beta.zip
4、把glut.lib和glut32.lib放到/program files/microsoft visual studio 6.0/vc98/lib」資料夾中。
5、把glut.dll和glut32.dll放到作業系統目錄下面的system32資料夾中。(一般為:c:/windows/system32)
6、開啟vc++6.0,新建立乙個工程。
7、在visual c++中單擊選單project->settings...,單擊link標籤,在object/library modules 的最前面加上opengl32.lib glu32.lib glut32.lib glaux.lib gdi32.lib user32.lib
advapi32.lib .
8、在你的程式中包含如下標頭檔案:
//#include
//#include
//#include
#include
這裡需要特別注意的是:如果包含了glut.h,則其他三個標頭檔案就一定不要包含,否則就會出現如下莫名其妙的錯誤:
d:\program files\visual studio 6.0\vc98\include\gl\gl.h(1152) : error c2144: syntax error : missing ';' before type 'void'
d:\program files\visual studio 6.0\vc98\include\gl\gl.h(1152) : error c2501: 'wingdiapi' : missing storage-class or type specifiers
d:\program files\visual studio 6.0\vc98\include\gl\gl.h(1152) : fatal error c1004: unexpected end of file found
VC 6 0下OpenGL開發環境配置
opengl官方 英文 下面我將對windows下的opengl程式設計進行簡單介紹。第一步 選擇乙個編譯環境 現在windows系統的主流編譯環境有visual studio,broland c builder,dev c 等,它們都是支援opengl的。但這裡我們選擇vc 6.0作為學習open...
在VC6 0中的除錯
3.設定資料斷點,和上面不同也就是表示式,換成了乙個全域性變數,並且在斷點對話方塊中,選中data選項卡,然後輸入全域性變數名,那麼當這個全域性變數的值發生給變時,程式就會中斷。4.設定訊息斷點 就是指斷點與訊息及相應的訊息處理函式 當某個訊息處理函式處理了乙個斷點訊息,程式將在訊息處理函式處中斷。...
Miracl在VC 6 0中的配置和使用
一 miracl庫 是大數運算函式庫,用來設計與大數運算相關的密碼學之應用,包含 rsa 公開密碼學 diffie hellman金鑰交換 key exchange aes dsa數字簽名,還包含 較新的橢圓曲線密碼學 elliptic curvecryptography 等等。運算速度快,並提供源...