說起程式設計作圖,大概還有很多人想起tc的#include 吧?
但是各位是否想過,那些畫面絢麗的pc遊戲是如何編寫出來的?就靠tc那可憐的640*480解析度、16色來做嗎?顯然是不行的。
本帖的目的是讓大家放棄tc的老舊圖形介面,讓大家接觸一些新事物。
opengl作為當前主流的圖形api之一,它在一些場合具有比directx更優越的特性。
1、與c語言緊密結合。
opengl命令最初就是用c語言函式來進行描述的,對於學習過c語言的人來講,opengl是容易理解和學習的。如果你曾經接觸過tc的graphics.h,你會發現,使用opengl作圖甚至比tc更加簡單。
2、強大的可移植性。
微軟的direct3d雖然也是十分優秀的圖形api,但它只用於windows系統(現在還要加上乙個xbox遊戲機)。而opengl不僅用於 windows,還可以用於unix/linux等其它系統,它甚至在大型計算機、各種專業計算機(如:醫療用顯示裝置)上都有應用。並且,opengl 的基本命令都做到了硬體無關,甚至是平台無關。
3、高效能的圖形渲染。
opengl是乙個工業標準,它的技術緊跟時代,現今各個顯示卡廠家無一不對opengl提供強力支援,激烈的競爭中使得opengl效能一直領先。
總之,opengl是乙個很nb的圖形軟體介面。至於究竟有多nb,去看看doom3和quake4等專業遊戲就知道了。
opengl官方**(英文)
下面將對windows下的opengl程式設計進行簡單介紹。
學習opengl前的準備工作
第一步,選擇乙個編譯環境
現在windows系統的主流編譯環境有visual studio,broland c++ builder,dev-c++等,它們都是支援opengl的。但這裡我們選擇visual studio 2005作為學習opengl的環境。
第二步,安裝glut工具包
glut不是opengl所必須的,但它會給我們的學習帶來一定的方便,推薦安裝。
/resources/libraries/glut/glutdlls37beta.zip
windows環境下安裝glut的步驟:
2、在「我的電腦」中搜尋「gl.h」,並找到其所在資料夾(如果是visualstudio2005,則應該是其安裝目錄下面的「vc\platformsdk\include\gl資料夾」)。把解壓得到的glut.h放到這個資料夾。
3、把解壓得到的glut.lib和glut32.lib放到靜態函式庫所在資料夾(如果是visualstudio2005,則應該是其安裝目錄下面的「vc\lib」資料夾)。
4、把解壓得到的glut.dll和glut32.dll放到作業系統目錄下面的system32資料夾內。(典型的位置為:c:\windows\system32)
第三步,建立乙個opengl工程
這裡以visualstudio2005為例。
然後向該工程新增乙個**檔案,取名為「opengl.c」,注意用.c來作為檔案結尾。
搞定了,就跟平時的工程沒什麼兩樣的。
第乙個opengl程式
乙個簡單的opengl程式如下:(注意,如果需要編譯並執行,需要正確安裝glut,安裝方法如上所述)
#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)類似。
OpenGL入門學習
include 太陽 地球和月亮 假設每個月都是30天 一年12個月,共是360天 static int day 200 day的變化 從0到359 void mydisplay void void myidle void int main int argc,char argv 3 關於垂直同步co...
OpenGL入門學習
說起程式設計作圖,大概還有很多人想起tc的 include 吧?但是各位是否想過,那些畫面絢麗的pc遊戲是如何編寫出來的?就靠tc那可憐的640 480解析度 16色來做嗎?顯然是不行的。本帖的目的是讓大家放棄tc的老舊圖形介面,讓大家接觸一些新事物。opengl作為當前主流的圖形api之一,它在一...
OpenGL入門學習(三)
在第二課中,我們學習了如何繪製幾何圖形,但大家如果多寫幾個程式,就會發現其實還是有些鬱悶之處。例如 點太小,難以看清楚 直線也太細,不舒服 或者想畫虛線,但不知道方法只能用許多短直線,甚至用點組合而成。這些問題將在本課中被解決。下面就點 直線 多邊形分別討論。1 關於點 點的大小預設為1個畫素,但也...