OpenGL 讓我們畫幾條線

2021-07-14 02:25:12 字數 2645 閱讀 7990

看了opengles已經有一段時間了,大致對這個3d庫有了一些了解,之後就開始對這套api進行一下深入的研究學習。

首先要先了解一下gl和glut的概念,自己詳細google下,總之你得先了解你所要用的庫以及庫的功能,在這裡簡單提一下,gl是3d庫的主要api框架,而glut則是一些工具,我們在x86_64或i386架構下使用xcode所對應的標頭檔案是:

#include 

#include

#include

glut在這裡會提供一些建立桌面視窗之類的工具,用於顯示opengl畫出圖的效果;話不多說,直接上例子。

#include 

#include

int main(int argc, char * argv)

先不著急,一點一點解釋:

glutinit

glut初始化,在這裡提一下第二個引數,因為之前用xcode建立例子的時候,函式主入口是這樣的:

int main(int argc, const

char * argv)

然而進行傳參時,glutinit(&argc,argv)提示沒有匹配的函式,經查證後得知是引數傳錯了,理由是:指向const的指標不能被賦給指向非const的指標;解決辦法倒不是沒有,應該用strcpy,也就是另開一塊記憶體,把字元乙個個複製過去,但是這樣太麻煩了,索性直接改掉main()的引數好了;

glutinitwindowposition

設定視窗的初始位置,以桌面左上角為零點;

glutinitwindowsize

設定視窗的大小;

glutcreatewindow

建立視窗,給定乙個視窗標題;

gluortho2d

接下來的這個函式是在

畫一條線:

void drawline(void);

int point2 = ;

int point3 = ;

glbegin(gl_lines);

glvertex2iv(point1);

glvertex2iv(point2);

glvertex2iv(point3);

glend();

/*** 如果列出的端點數為奇數,則最後乙個端點被忽略;

*/glflush();

}

glclearcolor

使用該函式設定圖形背景顏色,四個引數分別是我們熟悉的rgba;然而該函式只是將顏色值儲存在了顏色快取中,必須要通過呼叫glclear才能將顏色值取出來;

glcolor3f

使用該函式設定的顏色對要進行畫的畫素著色;如果是一條線,它將是線的顏色;

glbegin(gl_lines);

glend();

畫圖需要被包含在以上兩個函式之間,glbegin的引數將決定畫的是什麼圖形,各圖形畫圖時有各自的規則,之後慢慢講解;畫點函式glvertex*,在vertex後的2,3,4數字表示維數(在幾維的空間座標系中);之後接的是型別,表示浮點還是整形等;最後如果加v的話,表示傳入的將是乙個用陣列表示的點,本例中就是這樣表示的;

glflush

最後這個函式非常重要,沒有它,之前所做的一切都白費了;原文解釋,該函式強制由計算機系統存放在不同位置的快取中的opengl函式執行,其位置依賴於opengl的實現,暫時還不是能太搞懂,之後可能會詳細介紹,本章只是做了乙個引入。

另外如果要畫乙個點則可以這樣做:

glbegin(gl_points);

glvertex2i(x, y);

glend();

這樣可以通過迴圈,畫一些不規則的圖形,如果你自己設計演算法,也許圓也可以畫的出來;另外如果要從乙個畫素點上取得顏色,則需要使用getpixel

畫一條折線:

void drawpolyline(void),,,,};

glbegin(gl_line_strip);//strip條狀,剝去

for (int i=0; i<5; i++)

glend();

/*** 使用圖元常量gl_line_strip可獲得折線;

* 如果不列出至少兩個點,則什麼也不顯示;**/

glcolor3f(1, 0, 0);

int pointloop[5][2] = ,,,,};

glbegin(gl_line_loop);

for (int i=0; i<5; i++)

glend();

/*** 使用圖元常量gl_line_loop可獲得閉合折線;

* 如果不列出至少兩個點,則什麼也不顯示;

* 最後乙個端點與第乙個端點相連線;**/

glflush();

}

上面的例子會教你如何畫一條折線或者閉合折線,注意看裡面的注釋。

本篇就講到這裡,持續學習並更新中…

讓我們來FirePHP

firephp是什麼?firephp是乙個利用firebug console欄輸出除錯資訊方便程式除錯。這一切只需要呼叫幾個簡單的函式。他看起來是怎麼個樣子?為什麼要用它?在開發環境下正常執行的程式放在生產環境出問題了!我期望可以在生產環境中進行修改。但不期望客戶看到這一切的發生。請選擇fireph...

讓我們沒有煩惱

道理我們都知道,可是很多時候我們遺忘了,那麼就用這個故事來提醒自己 天底下只有三件事 一件是 自己的事 諸如 上不上班 吃什麼東西 開不開心 結不結婚 要不要幫助人.自己能安排的皆屬之。一件是 別人的事 諸如 小張好吃懶做 小陳婚姻不幸福 老陳對我很不滿意 我幫助別人,別人卻不感激.別人在主導的事情...

生活讓我們懂得

今天看一文章很好,摘抄下來 不能強迫別人來愛自己,只能努力讓自己成為值得愛的人,其餘的事情則靠緣分。信任也許需要好紀念才能建立,卻可以在短短幾秒內毀滅。生活中最寶貴的東西不是你擁有的物質,而是陪伴在你身邊的人。一時的錯誤可能導致一輩子的傷痛。實現自己的理想需要從現在開始行動。我可以做得比自己想象中的...