OpenGL中的二维编程——从简单的矩形开始
生活随笔
收集整理的這篇文章主要介紹了
OpenGL中的二维编程——从简单的矩形开始
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、OpenGL的組成
- 圖元函數(shù)(primitive function)指定要生成屏幕圖像的圖元。包括兩種類型:可以在二維、三維或者四維空間進行定義的幾何圖元,如多邊形;離散實體;位圖。
- 屬性函數(shù)(attribute function)負責控制圖元的外觀。這類函數(shù)定義了顏色、線型、材質(zhì)屬性、光照以及紋理。
- 觀察函數(shù)(viewing function)指定攝像機的屬性。OpenGL提供一個虛擬攝像機,我們可相對于由圖元函數(shù)定義的對象設(shè)置該攝像機的位置和朝向。我們也可以控制攝像機的鏡頭參數(shù),以便制造出廣角或長焦效果。
- 查詢函數(shù)(query function)允許我們決定某一特定系統(tǒng)的性能以及OpenGL狀態(tài)變量的取值。
- 控制函數(shù)(control function)允許我們啟用或禁用各種OpenGL特性,如消隱、紋理映射和光照等。
- 輸入與窗口函數(shù)不屬于OpenGL核心庫,但是由于它們在交互式程序中的重要地位,這類函數(shù)已被包含在GLUT庫中。這些函數(shù)使我們能夠?qū)ζ聊恢械拇翱谶M行控制并使用鼠標和鍵盤。
?
二、庫組織結(jié)構(gòu)
下圖是Linux平臺下實現(xiàn)的庫組織結(jié)構(gòu)
對于Windows?或 Macintosh平臺,也有一張類似的組織結(jié)構(gòu)圖。
應(yīng)用程序既可以使用OpenGL、GLU以及GLX庫中的函數(shù),也可以直接使用X庫或X工具集中的函數(shù)。
另外還有一種折衷的方法是借助GLUT庫,這樣可以使同一個程序能夠在不同的平臺下重新編譯和運行。
?
三、GLUT
void glutInit(int * argc, char ** argv); //初始化GLUT,應(yīng)在其他GLUT函數(shù)和OpenGL函數(shù)之前進行調(diào)用。 //glutInit()接收來自main函數(shù)的參數(shù),程序可以具體實現(xiàn)相關(guān)的方式來使用這些參數(shù)所有的GLUT函數(shù)都是以glut為前綴。
函數(shù)glutCreateWindow()將一個窗口以默認尺寸(300*300像素)顯示在屏幕的默認位置上(屏幕左上角)。該函數(shù)的參數(shù)使我們可為窗口創(chuàng)建一個標題。
int glutCreatewindow(char * title) //在屏幕上創(chuàng)建一個窗口,該窗口的標題由參數(shù)title給出。 //在多窗口情況下,該函數(shù)返回一個標識所創(chuàng)建窗口的整數(shù)。下圖是帶有GLUT的庫組織結(jié)構(gòu):
?
四、事件循環(huán)和回調(diào)函數(shù)
void glutDisplayFunc(void (*func)(void)) //函數(shù)func()在每次需要對窗口重繪時被調(diào)用。 void glutMainLoop() //使程序進入無限事件處理循環(huán)。該函數(shù)的調(diào)用應(yīng)作為main函數(shù)最后一條語句出現(xiàn)提示:GLUT回調(diào)函數(shù)的形式是固定的。所以,若要在不同的函數(shù)之間進行值傳播,可能需要借助全局變量。
?
五、矩形的繪制
void glVertex<234><sifd>(type xcoordinate,type ycoordiante,...) void glVertex<234><sifd>(type * coordinates) //指定頂點在二維、三維或思維空間中的位置坐標,坐標值的類型可以是short(s)、int(i)、float(f)或double(d)。 //如果函數(shù)名的末尾出現(xiàn)了v,則type為一個指向指定類型的坐標數(shù)組的指針。 void glBegin(GLenum mode) //指定mode類型對象的起始點。mode可取GL_POINTS、GL_LINES或GL_POLYGON void glEnd() //指定頂點列表的終止點提示:在頂點列表的末尾不要忘記包含glEnd()。
void glClear(GLbitfield mask) //清空mask指示的所有緩存的位。 //其中mask可由定義在gl.h中的常量通過邏輯或運算構(gòu)成。GL_COLOR_BUFFER_BIT指顏色緩存 void glFlush() //強制執(zhí)行之前緩存的所有OpenGL命令?
六、示例程序
Github地址
1 #include <GL/glut.h> 2 void display() //定義了所要繪制的圖形實體 3 { 4 glClear(GL_COLOR_BUFFER_BIT); 5 glBegin(GL_POLYGON); 6 glVertex2f(-0.5, -0.5); 7 glVertex2f(-0.5, 0.5); 8 glVertex2f(0.5, 0.5); 9 glVertex2f(0.5, -0.5); 10 glEnd(); 11 glFlush(); 12 } 13 14 int main(int argc, char ** argv) //OpenGL的初始化 15 { 16 glutInit(&argc, argv); 17 glutCreateWindow("simple"); 18 glutDisplayFunc(display); 19 glutMainLoop(); 20 }?
轉(zhuǎn)載于:https://www.cnblogs.com/OctoptusLian/p/6343194.html
總結(jié)
以上是生活随笔為你收集整理的OpenGL中的二维编程——从简单的矩形开始的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POJ3264 【RMQ基础题—ST-线
- 下一篇: 解决阿里云服务器磁盘报警